Академический Документы
Профессиональный Документы
Культура Документы
MicroProcesadores
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.
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:
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.
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.
De hardware
De software
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