LENGUAJE ENSAMBLADOR
Enviado por binghiman • 5 de Septiembre de 2011 • 7.179 Palabras (29 Páginas) • 1.034 Visitas
BREVE RESUMEN DE LENGUAJE ENSAMBLADOR
0.- MOTIVACION.
El lenguaje ensamblador continúa siendo imprescindible para imple-
mentar fragmentos de código donde la velocidad del ejecutable y/o
su tamaño sean críticos. Afortunadamente, muchos compiladores per-
miten la inclusión directa en el código fuente de sentencias en
ensamblador, de forma que ya no es necesario en la mayor parte de
los casos el uso de ensambladores. Como ventaja adicional, no es
necesario conocer las directivas de ensamblador, ya que pueden es-
tablecerse desde el entorno de desarrollo y van implícitas en las
directivas del compilador, por ejemplo, el compilador Pascal de
Borland o el compilador C/C++ de la misma compañía.
Aún así, a muchos programadores les resulta difícil renunciar al
control absoluto de la máquina que permite el lenguaje ensambla-
dor.
1.-REGISTROS DEL 8086
El 8086 dispone de ocho registros de propósito general, que pode-
mos considerar como memorias implementadas sobre la misma CPU de
acceso muy rápido. Estos registros reciben los nombres de AX, BX,
CX, DX, SI, DI, BP, SP. Existe tambien un registro IP (Instruction
Pointer)que apunta a la siguiente instrucción a ejecutar, formando
su dirección junto con el registro CS, que citaremos a
continuación. Aparte de los registros generales y de IP, existen
registros de segmento, llamados CS, DS, SS, ES y un registro de
flags, cuyos bits no son accesibles directamente y que reflejan
los resultados de distintas operaciones.
Cualquiera de los registros de propósito general puede usarse para
escribir a/desde memoria, realizar operaciones, como punteros o
contadores, pero cada uno tiene una personalidad especial, y es
una buena práctica de programación usarlos para lo que fueron
principalmente concebidos.
AX se usa siempre en multiplicaciones y divisiones y es el mas
eficiente para operaciones aritméticas y de movimiento de datos.
BX se usa como puntero, y junto con DS referencia posiciones de
memoria. Por ejemplo, para cargar en AL el contenido de la posi-
ción de memoria número 9:
MOV AX,0
MOV DS,AX
MOV BX,9
MOV AL,[BX]
CX se usa principalmente como contador en los bucles. Estos son
tan frecuentes que existe una instrucción especial, LOOP, que
comprueba su valor, volviendo al principio del bucle si es
distinto de cero:
MOV CX,10
BUCLE:
instrucciones
LOOP BUCLE
DX es el único registro que puede usarse para acceder a puertos.
Por ejemplo, para escribir 62H en la dirección de puerto 1000H:
MOV AL,62H
MOV DX,1000H
OUT DX,AL
SI se usa como puntero. Su nombre proviene de Source Index, y se
usa principalmente con instrucciones de cadena:
CLD
MOV AX,0
MOV DS,AX
MOV SI,20
LODSB
carga en AX el valor de la posición 20 de memoria. SI se incrementa
en una unidad. En combinación con LOOP permite leer posiciones su-
cesivas de memoria.
DI tambien se usa como puntero. Permite escribir en posiciones
sucesivas de memoria cuando se usa con instrucciones de cadena:
CLD
MOV DX,0
MOV ES,DX
MOV DI,2048
STOSB
escribe el contenido de AL en 0000:2048. Mientras que DI usa a ES
como segmento, SI usa a DS.
BX, DI y SI actuan como punteros relativos a DS, o a ES en el caso
de DI cuando se usa con funciones de cadena. BP actua tambien co-
mo puntero, pero relativo al segmento de pila SS.
SP es entre los registros de uso general el mas específico, ya que
no se recomienda su uso, pues apunta al extremo superior de la pi-
la, y por ello no debe modificarse salvo que se sepa exactamente
que se está haciendo.
2.-ESTRUCTURA DE UN PROGRAMA EN ENSAMBLADOR.
Expondremos brevemente la estructura de un programa fuente en en-
samblador. Este está compuesto
...