Вы находитесь на странице: 1из 9

Trabajo de investigacin de

MicroProcesadores

Lenguaje Ensamblador (ASM)


Intel 8085, 8086, 8051

Lenguaje Ensamblador
Es el lenguaje de programacin utilizado para escribir programas
informticos de bajo nivel, y constituye la representacin ms directa
del Cdigo mquina especfico para cada arquitectura de computadoras
legible por un programador. Aun hoy se utiliza en la programacin de
handler o manipuladores de dispositivos de hardware.
El lenguaje ensamblador expresa las instrucciones de una forma ms
natural al hombre a la vez que muy cercana al microcontrolador o
microprocesador, ya que cada una de esas instrucciones se corresponde
con otra en cdigo mquina.
Entre las caractersticas del lenguaje ensamblador tenemos:
Son generalmente ms rpidos y consumen menos recursos del sistema
(memoria RAM y ROM). Al programar cuidadosamente en lenguaje
ensamblador se pueden crear programas que se ejecutan ms
rpidamente y ocupan menos espacio que con lenguajes de alto nivel.
Se puede controlar el tiempo en que tarda una Rutina en ejecutarse.
El lenguaje ensamblador es difcilmente portable, es decir, un cdigo
escrito para un Microprocesador, suele necesitar ser modificado, muchas
veces en su totalidad para poder ser usado en otra mquina distinta,
aun con el mismo Microprocesador, solo pueden ser reutilizados
secciones especiales del cdigo programado.
El lenguaje ensamblador es un cdigo estructurado y gravitatorio
desarrollado sobre un archivo de programacin (.ASM), en el cual
pueden existir varios programas, macros o rutinas que pueden ser
llamados entre s.
El cdigo mquina, o lenguaje de mquina, est formado por
instrucciones sencillas, que dependiendo de la estructura del procesador
pueden especificar:

Registros
especficos
para
operaciones
aritmticas,
direccionamiento o control de funciones.
Posiciones de memoria especficas (offset).
Modos de direccionamiento usados para interpretar operandos.

8086/88, 8085, 8051


Cada uno de estos microprocesadores tienen un tamao de datos
definido, as tambin ciertas caractersticas que lo muestran en cada
hoja
de
fabricante
correspondiente.
El lenguaje ASM (ensamblador) es utilizado en todos estos
microprocesadores.
Estructura de un programa en ensamblador
Un programa en el lenguaje ensamblador consiste de una secuencia de
proposiciones, una en cada lnea del cdigo fuente.
La sintaxis de una proposicin es la siguiente: [etiqueta] [instruccin|directiva
[operandos]] [;comentario] donde etiqueta, instruccin|directiva, operandos,
comentario son los campos de la proposicin.
Los campos se separan por caracteres blancos: caracteres de espacio y/o de
tabulacin. Todos los campos son opcionales, pero el campo operandos slo
pueden estar presente si existe el campo instruccin|directiva.
Etiqueta es un nombre simblico empleado para referirse a nmeros, cadenas
de caracteres o localidades de memoria dentro de un programa. Las etiquetas
permiten darle nombre a las variables, constantes y localidades de una
instruccin particular.
Inicio: mov ds,ax ; comentario
Las palabras reservadas son para uso estricto del ensamblador. stas incluyen
a los operadores, directivas y smbolos predefinidos. Estas palabras no pueden
usarse como identificadores. Algunas de ellas son

Las variables de un programa se declaran en el segmento de datos, por lo que


la seccin de declaracin de variables empieza con la directiva dataseg. Esta
directiva le indica a Turbo Assembler que almacene las variables en el
segmento de datos del programa. Las variables pueden estar inicializadas o no.

Los valores de las variables inicializadas se almacenan en el cdigo del


programa y se cargan en las variables al ejecutar el programa.
Para declarar variables podemos utilizar las directivas db, dw, dd o dq. La
directiva db define una variable de un byte, la directiva dw define una variable
de tipo palabra (dos bytes), la directiva dd define una variable de tipo palabra
doble (cuatro bytes) y la directiva dq define una variable de tipo palabra
cudruple (ocho bytes). La sintaxis de estas directivas son:
nomVar
nomVar
nomVar
nomVar

db exp
dw exp
dd exp
dq exp

Tamao de datos:
En el 8086/88 se definen los siguientes tamaos de datos:
4 bits = nibble
8 bits = byte
16 bits = word
32 bits = dword
Almacenamiento de datos:
El 8086/88 usa el formato de almacenamiento denominado little
endian, esto quiere decir que el byte menos significativa (LSB) del dato
es guardada en la parte baja de la memoria. Por ejemplo el dato 0x1122
ser almacenado en memoria:

Es importante tener esto en cuenta a la hora de acceder a los datos para


operar con ellos.

Registros internos
El 8086/88 dispone de 4 registros de datos, 4 registros de segmento, 5
registros de ndice y 1 registro de estado.

Registros de datos
AX (acumulador) se usa para almacenar el resultado de las operaciones, es al
nico registro con el que se puede hacer divisiones y multiplicaciones. Puede
ser accedido en 8 bits como AH para la parte alta (HIGH) y AL (LOW) para la
parte baja.

BX (registro base) almacena la direccin base para los accesos a memoria.


Tambin puede accederse como BH y BL, parte alta y baja respectivamente.
CX (contador) acta como contador en los bucles de repeticin. CL (parte baja
del registro) almacena el desplazamiento en las operaciones de
desplazamiento y rotacin de mltiples bits.
DX (datos) es usado para almacenar los datos de las operaciones.

Registro de segmentos
CS (segmento de cdigo) contiene el valor de segmento donde se encuentra el
cdigo. Acta en conjuncin con el registro IP (que veremos ms adelante) para
obtener la direccin de memoria que contiene la prxima instruccin. Este
registro es modificado por las instrucciones de saltos lejanos.
DS (segmento de datos) contiene el segmento donde estn los datos.
ES (segmento extra de datos) es usado para acceder a otro segmento que
contiene ms datos.
SS (segmento de pila) contiene el valor del segmento donde est la pila. Se usa
conjuntamente con el registro SP para obtener la direccin donde se encuentra
el ltimo valor almacenado en la pila por el procesador.

Registro de ndice
IP (ndice de programa) almacena el desplazamiento dentro del segmento de
cdigo. Este registro junto al registro CS apunta a la direccin de la prxima
instruccin. No puede ser usado como operando en operaciones
aritmtico/lgicas.

SI (ndice de origen) almacena el desplazamiento del operando de origen en


memoria en algunos tipos de operaciones (operaciones con operandos en
memoria).
DI (ndice de destino) almacena el desplazamiento del operando de destino en
memoria en algunos tipos de operaciones (operaciones con operandos en
memoria).
SP (ndice de pila) almacena el desplazamiento dentro del segmento de pila, y
apunta al ltimo elemento introducido en la pila. Se usa conjuntamente con el
registro SS.
BP (ndice de base) se usa para almacenar desplazamiento en los distintos
segmentos. Por defecto es el segmento de la pila.
Calculo de memoria
El 8086 tiene un bus de direcciones de 20bita. Por tanto un solo registro no
tiene la capacidad de representar 20bits ya que los registros son de 16 bits.
Cada direccin de memoria se divide en 2 partes. El segmento y el
desplazamiento. La notacin en Hex sera algo as SSSS:DDDD
La manera de calcular una direccin real de memoria es correr el registro de
segmento 4bits a la izquierda y luego sumarle el desplazamiento.
EJ: 2A54:0022
Al desplazar el segmento 4 bit a la izquierda, nos quedara
2A540 Luego
2A540
+0022
______
2A562 Hex
De esta manera obtendremos la direccin absoluta de memoria. Note que el
resultado es de 20 bits
Interrupciones
Es un mecanismo de transferencia de control, bsicamente ocasiona que la
CPU detenga su ejecucin del programa actual y transfiera el control a una
rutina de servicio. Al terminar de ejecutar la interrupcin, el CPU contina con
los procesos que se estaban ejecutando antes de la interrupcin. Bsicamente
existen 2 tipos de interrupciones:

De hardware

De software

Las interrupciones de hardware son asncronas, es decir, pueden ocurrir en


cualquier momento y no estn bajo el control del programa.
Las interrupciones de Software, pueden invocarse a voluntad y son
controladas por el programa en forma sincrnica (es decir, se conoce todo lo
relacionado con su ejecucin ya que el programa controla el momento y la
manera en que son invocadas)

Variantes permisibles de la instruccin mov


1. Mov registro, registro
2. Mov registro, memoria
3. Mov memoria, registro
4. Mov memoria, valor inmediato
5. Mov registro, valor inmediato
6. Mov memoria, acumulador
7. Mov acumulador, memoria
8. Mov Registro de segmento, memoria
9. Mov registro, registro de segmento
10. Mov registro de segmento, memoria
11. Mov memoria, registro de segmento
Instruccin Xlat
Xlat es una instruccin que se utiliza para trabajar con tablas (o arreglos). Se
utilizan los registros AL y BX.
La instruccin xlat reemplaza el valor de AL por un nuevo valor tomado de la
tabla y el registro BX contiene la direccin del primer elemento de la tabla.
Ejemplo: Tabla DB ABCEDEFGHIJK
.
Mov Bx, Offset Tabla
Mov AL, 3
Mov DL,AL ; Prepara dato para mostrar por pantalla
Mov AH,2 ; Funcin 2 de la int 21h. Donde DL debe tener carcter a desplegar.
Int 21h ; Se muestra por pantalla el tercer carcter de la tabla
Instruccin Loop
Loop es una instruccin cuya funcin es realizar un bucle. Trabaja en conjunto
con el registro CX, donde cx contiene el nmero de repeticiones que se debe
realizar.
Mov CX,5
Mov Ax,1

Programa:
add ax,1
loop Programa
Rutinas
Las rutinas son secuencias o bloques de cdigo que pueden reutilizarse. Estas
rutinas son invocadas por la instruccin CALL.
Existen dos tipos de instrucciones de salto o alteracin del flujo de ejecucin.
La instruccin jmp altera el flujo de ejecucin enviando el control en forma
incondicional a la direccin indicada.
Las instrucciones de salto condicional basan su bifurcacin en el estatus que
tengan ciertas banderas del registro correspondiente. Ejemplo: Jnz (salta si el
resultado es <> 0) y jz (salta si el resultado es cero)

Ejemplos de programas
Ejemplo 1
El siguiente es un ejemplo del programa clsico Hola mundo escrito para
la arquitectura de procesador x86 (bajo el sistema operativo DOS) en
modo texto (por defecto).
.model small
.stack
.data
Cadena1 DB 'Hola Mundo.$'
.code

programa:
mov ax, @data
mov ds, ax
mov dx, offset Cadena1

mov ah, 9
int 21h
int 20h
end programa

Вам также может понравиться