Ensamblador_80x86
Páginas: 22 (5317 palabras)
Publicado: 6 de noviembre de 2015
1.
2.
3.
4.
5.
6.
7.
Introducción
Registros internos
Almacenamiento de datos
Modos de direccionamiento
Juego de Instrucciones
Etiquetas, cometarios y directivas
Problemas
1. Introducción
El lenguaje ensamblador como cualquier lenguaje de programación es un conjunto de palabras
que le indican al ordenador lo que tiene que hacer. Sin embargo la diferencia fundamental es que
cadainstrucción escrita en lenguaje ensamblador tiene una correspondencia exacta con una
operación en el procesador. Por lo que son operaciones muy sencillas tales como: “Cargar 32 en
el registro BX” o “Transferir el contenido del registro CL al CH”. Así pues, las palabras del lenguaje
ensamblador son nemotécnicos que representan al código máquina, lenguaje que entiende el
procesador.
1.1. Tamaño delos datos
En el 80x86 se definen los siguientes tamaños de datos:
Fig. 1: Tipos de datos que puede manejar el procesador
2. Registros internos
El 80x86 dispone de 8 registros de propósito general (4 de datos y 4 índice), 6 registros de
segmento, 1 registro de índice de programa y 1 registro de estado.
1
Ensamblador 80x86
Fig. 2: Registros internos del 80x86
2.1. Registros de datos
Losregistros de datos son de 32 bits, aunque están divididos, lo que permite su acceso a 8 bits o
a 16 bits. Estos registros son de propósito general aunque todos tienen alguna función por
defecto.
EAX (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 y AL;
y a 16 bits comoAX.
|-------AX-------|
EAX:
AH
AL
EBX (registro base) almacena la dirección base para los accesos a memoria. También puede
accederse como BH y BL, o BX de la misma forma que el anterior.
ECX (contador) actúa como contador en los bucles de repetición. CL (parte baja del registro)
almacena el desplazamiento en las operaciones de desplazamiento y rotación de múltiples bits.
EDX (datos) es usadopara almacenar los datos de las operaciones. También es accesible en 8,
16 y 32 bits.
2.2. Registros de segmento
Los registros de segmento son de 16 bits y contienen el valor de segmento. El uso de segmentos
para dividir el espacio de la memoria es una reminiscencia del procesador 8086, el primero de la
familia. En los procesadores 80386 y posteriores los registros de segmentos son usados demanera automática por el procesador, sin que el programador deba preocuparse por el valor que
en cada momento tiene, salvo para algunas instrucciones especiales.
CS (segmento de código) contiene el valor de segmento donde se encuentra el código. Actúa en
conjunción con el registro EIP para obtener la dirección de memoria que contiene la próxima
instrucción. Este registro es modificado por lasinstrucciones de saltos lejanos.
2
Departamento de Arquitectura y Tecnología de Computadores: Universidad de Sevilla
DS (segmento de datos) contiene el segmento donde están los datos.
ES (segmento extra de datos) es usado para acceder a otro segmento que contiene más datos.
SS (segmento de pila) contiene el valor del segmento donde está la pila. Se usa conjuntamente
con el registro ESP para obtener ladirección donde se encuentra el último valor almacenado en la
pila por el procesador.
FS, GS: se usan como registros de segmento adicionales
2.3. Registros de índice
Estos registros son de 32 bits y son usados como índices por algunas instrucciones, pueden ser
accedidos solo a 16 bits. También pueden ser usados como operandos.
ESI (índice de origen) almacena el desplazamiento del operando deorigen en memoria en
algunos tipos de operaciones (operaciones con operandos en memoria).
EDI (índice de destino) almacena el desplazamiento del operando de destino en memoria en
algunos tipos de operaciones (operaciones con operandos en memoria).
ESP (índice de pila) almacena el desplazamiento dentro del segmento de pila, y apunta al último
elemento introducido en la pila. Se usa conjuntamente con...
Leer documento completo
Regístrate para leer el documento completo.