Sunteți pe pagina 1din 11

Registros de uso general del 8086

AX = Registro acumulador, dividido en AH y AL (8 bits cada uno).

Usándolo se produce (en general) una instrucción que ocupa un byte menos que
si se utilizaran otros registros de uso general. Su parte más baja, AL, también
tiene esta propiedad. El último registro mencionado es el equivalente al
acumulador de los procesadores anteriores (8080 y 8085). Además hay
instrucciones como DAA; DAS; AAA; AAS; AAM; AAD; LAHF; SAHF; CBW; IN y
OUT que trabajan con AX o con uno de sus dos bytes (AH o AL). También se
utiliza este registro (junto con DX a veces) en multiplicaciones y divisiones.

BX = Registro base, dividido en BH y BL.

Es el registro base de propósito similar (se usa para direccionamiento indirecto) y


es una versión más potente del par de registros HL de los procesadores
anteriores.

CX = Registro contador, dividido en CH y CL.

Se utiliza como contador en bucles (instrucción LOOP), en operaciones con


cadenas (usando el prefijo REP) y en desplazamientos y rotaciones (usando el
registro CL en los dos últimos casos).

DX = Registro de datos, dividido en DH y DL.

Se utiliza junto con el registro AX en multiplicaciones y divisiones, en la instrucción


CWD y en IN y OUT para direccionamiento indirecto de puertos (el registro DX
indica el número de puerto de entrada/salida).

SP = Puntero de pila (no se puede subdividir).

Aunque es un registro de uso general, debe utilizarse sólo como puntero de pila, la
cual sirve para almacenar las direcciones de retorno de subrutinas y los datos
temporarios (mediante las instrucciones PUSH y POP). Al introducir (push) un
valor en la pila a este registro se le resta dos, mientras que al extraer (pop) un
valor de la pila este a registro se le suma dos.

BP = Puntero base (no se puede subdividir).

Generalmente se utiliza para realizar direccionamiento indirecto dentro de la pila.

SI = Puntero índice (no se puede subdividir).

Sirve como puntero fuente para las operaciones con cadenas. También sirve para
realizar direccionamiento indirecto.
DI = Puntero destino (no se puede subdividir).

Sirve como puntero destino para las operaciones con cadenas. También sirve para
realizar direccionamiento indirecto.

Cualquiera de estos registros puede utilizarse como fuente o destino en


operaciones aritméticas y lógicas.

Registros de la unidad de interfaz con el bus:


El programador puede acceder a cinco registros de 16 bits cada uno, siendo
cuatro de ellos registros de segmento y el restante el puntero de instrucción (IP).

Los registros de segmento se llaman:

CS: Registro de segmento de código.

DS: Registro de segmento de datos.

ES: Registro de segmento extra.

SS: Registro de segmento de pila.

Indicadores (flags)
Hay nueve indicadores de un bit en este registro de 16 bits. Los cuatro bits más
significativos están indefinidos, mientras que hay tres bits con valores
determinados: los bits 5 y 3 siempre valen cero y el bit 1 siempre vale uno

Registro de indicadores (16 bits)


Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Flag -- -- -- -- OF DF IF TF SF ZF 0 AF 0 PF 1 CF
CF (Carry Flag, bit 0): Si vale 1, indica que hubo "arrastre" (en caso de suma)
hacia, o "préstamo" (en caso de resta) desde el bit de orden más significativo del
resultado. Este indicador es usado por instrucciones que suman o restan números
que ocupan varios bytes. Las instrucciones de rotación pueden aislar un bit de la
memoria o de un registro poniéndolo en el CF.

PF (Parity Flag, bit 2): Si vale uno, el resultado tiene paridad par, es decir, un
número par de bits a 1. Este indicador se puede utilizar para detectar errores en
transmisiones.

AF (Auxiliary carry Flag, bit 4): Si vale 1, indica que hubo "arrastre" o "préstamo"
del nibble (cuatro bits) menos significativo al nibble más significativo. Este
indicador se usa con las instrucciones de ajuste decimal.
ZF (Zero Flag, bit 6): Si este indicador vale 1, el resultado de la operación es cero.

SF (Sign Flag, bit 7): Refleja el bit más significativo del resultado. Como los
números negativos se representan en la notación de complemento a dos, este bit
representa el signo: 0 si es positivo, 1 si es negativo.

TF (Trap Flag, bit 8): Si vale 1, el procesador está en modo paso a paso. En este
modo, la CPU automáticamente genera una interrupción interna después de cada
instrucción, permitiendo inspeccionar los resultados del programa a medida que se
ejecuta instrucción por instrucción.

IF (Interrupt Flag, bit 9): Si vale 1, la CPU reconoce pedidos de interrupción


externas enmascarables (por el pin INTR). Si vale 0, no se reconocen tales
interrupciones. Las interrupciones no enmascarables y las internas siempre se
reconocen independientemente del valor de IF.

DF (Direction Flag, bit 10): Si vale 1, las instrucciones con cadenas sufrirán "auto-
decremento", esto es, se procesarán las cadenas desde las direcciones más altas
de memoria hacia las más bajas. Si vale 0, habrá "auto-incremento", lo que quiere
decir que las cadenas se procesarán de "izquierda a derecha".

OF (Overflow flag, bit 11): Si vale 1, hubo un desborde en una operación aritmética
con signo, esto es, un dígito significativo se perdió debido a que tamaño del
resultado es mayor que el tamaño del destino.

Microprocesador 80486
Este microprocesador es básicamente un 80386 con el agregado de una unidad
de punto flotante compatible con el 80387 y un caché de memoria de 8 KBytes.
Los ocho registros de propósito general de 32 bits mantienen datos y direcciones.
Estos registros soportan operandos de 1, 8, 16, 32 y 64 bits y campos de bits de 1
a 32 bits. Soportan operandos de direcciones de 16 y de 32 bits. Los nombres
simbólicos son: EAX, EBX, ECX, EDX, ESI, EDI, EBP y ESP. Los 16 bits menos
significativos se pueden acceder separadamente. Esto se hace usando los
nombres AX, BX, CX, DX, SI, DI, BP y SP. AX se divide en AH y AL, BX se divide
en BH y BL, CX se divide en CH y CL y DX se divide en DH y DL.

Los ocho registros de uso general de 32 bits se pueden usar para


direccionamiento indirecto. Cualquiera de los ocho registros puede ser la base y
cualquiera menos ESP puede ser el índice. El índice se puede multiplicar por 1, 2,
4 u 8.

• AX, AH, AL (Acumulador): a menudo conserva el resultado temporal después de


una operación aritmética o lógica.

• BX, BH, BL (Base): Se utiliza para guardar la dirección base de listas de datos en
la memoria.

• CX, CH, CL (Contador): Contiene el conteo para ciertas instrucciones de


corrimientos y rotaciones de iteraciones en el ciclo loop y operaciones repetidas de
cadenas.

• DX, DH, DL (Datos): Contiene la parte más significativa de un producto después


de una multiplicación; la parte más significativa del dividendo antes de la división.

Registros Apuntadores Y De Índices


• Se utilizan principalmente para formar la dirección efectiva o real de una
localidad de memoria.

• Las funciones primarias de los registros apuntadores y de índice incluyen:

• SP (Apuntador de pila): El registro SP se emplea para direccionar datos en la pila


cuando se ejecutan las instrucciones push y pop y cuando se llama o se regresa
de un procedimiento mediante las instrucciones: call y ret, respectivamente.

• BP (Apuntador de base): Contiene el desplazamiento con respecto al segmento


de pila de datos almacenados en la pila de un programa.

• SI (Índice fuente): Contiene el desplazamiento con respecto al segmento de


datos de un elemento de un arreglo o cadena.

• DI (Índice destino): Contiene el desplazamiento con respecto al segmento extra


de un elemento de una cadena o arreglo.

• IP (Apuntador de instrucciones): Contiene siempre el desplazamiento con


respecto al segmento de código de la localidad de memoria que contiene la
siguiente instrucción que va a ejecutar el microprocesador.

Registros de segmento

Son seis registros de 16 bits que mantienen valores de selectores de segmentos


identificando los segmentos que se pueden direccionar. En modo protegido, cada
segmento puede tener entre un byte y el espacio total de direccionamiento (4
gigabytes). En modo real, el tamaño del segmento siempre es 64 KB.

Los seis segmentos direccionables en cualquier momento se definen mediante los


registros de segmento CS, DS, ES, FS, GS, SS. El selector en CS indica el
segmento de código actual, el selector en SS indica el segmento de pila actual y
los selectores en los otros registros indican los segmentos actuales de datos.

• CS (Código): Tiene la dirección lógica del segmento en que se encuentra el


código de un programa. Si el código ocupa más de un segmento, contiene la
dirección lógica de uno de los segmentos.

• DS (Datos): Tiene la dirección lógica del segmento en que se encuentran los


datos estáticos de un programa. Si los datos ocupan más de un segmento,
contiene la dirección lógica de uno de los segmentos.

• ES (Extra): Este registro también tiene la dirección lógica de uno de los


segmentos en que se encuentran los datos estáticos de un programa.
• SS (Pila): Tiene la dirección lógica del segmento en que se encuentran la pila del
sistema. pila < segmento

Registro de banderas

• AC (verificación de alineación): Utilizada para indicar que el microprocesador ha


tenido acceso a una palabra en una dirección de paridad non o una doble palabra
almacenada en un límite que no es de doble palabra.

• VM (modo virtual): Se activa este bit mientras que el 80486 se opere en el modo
protegido.

• RF (resume): Utilizado en conjunto con los registros de depuración.

• NT (tarea anidada): Se activa para indicar que el 80486 está realizando una tarea
que está anidada en otra tarea.

• IOPL (nivel de privilegio de E/S): Indica el nivel de privilegio máximo actual


asignado al sistema de E/S.

• OF (sobre flujo): Indica que el resultado de una operación aritmética con signo ha
rebasado la capacidad del destino.

• DF (dirección): Selecciona una operación de autoincremento o auto decremento


para las instrucciones de cadenas.

• IF (habilitación de interrupciones): Habilita la terminal INTR si este bit está activo.

• TF (trampa): Activado para habilitar la depuración.

• SF (signo): Indica que el signo del resultado está activo o desactivado.

• ZF (cero): Indica que el resultado de una operación aritmética o lógica es cero o


no cero.

• AF (auxiliar): Utilizado en las instrucciones DAA y DAS para ajustar el resultado


de una suma o resta

• PF (paridad): Indica la paridad del resultado de una operación aritmética o lógica

Registros de prueba de la TLB


Los registros de prueba son una parte formal de la arquitectura 386 tenía para el
arqueo del TLB (TR6 Y TR7). El 486 añade otros tres registros más de 32 bits
para el control del buen funcionamiento de la caché interna del procesador.
El registro TR6 no se ha modificado respecto al del 386. El TR7añade algunos bits
más. Estos son:

• PCD: Bit PCD de la entrada de la tabla de páginas.

• PWT: bit PWD de la entrada de la tabla de páginas.

• LRU: cuando se lee este campo se obtiene el valor de los tres bits usados en el
algoritmo de reemplazo seudo-LRU de la caché.

• PL: Corresponde con el bit HT del TR7 del 386. En el 486 se puede escribir a
uno o cero.

Registros de prueba de la caché interna

• TR3 almacena los datos a transferir a la memoria caché.

• TR4 contiene el estado de prueba.

• TR5 es el registro de control de prueba de la caché.

A todos se accede mediante instrucciones MOV ingresadas a nivel de mayor


privilegio (cero).

TR4

• Válido: 4 bits de validación para las 4 vías del sector.

• LRU.

• V: bit de validación de la vía concreta que ha sido accedida entre las 4 que
pertenecen al mismo sector.

• Etiqueta: fuerza el valor de la etiqueta a la dirección asignada en el campo.

TR5

• CTL:

• 00: Escritura o lectura de la memoria intermedia de la caché.

• 01: Escritura de la caché.

• 10: Lectura de la caché.

• 11: invalidación de la caché. Se invalidan todas las posiciones.


• ENT. En lectura/escritura de la caché selecciona una de las cuatro vías del
sector seleccionado. En R/W de la memoria intermedia de la caché, selecciona
una de las cuatro dobles palabras que componen la línea.

Microprocesador Pentium

Registros de propósito general: Estos registros son utilizados para almacenar


valores, realizar operaciones aritméticas o lógicas o para referenciar el espacio de
direcciones lineal. En procesadores de 32 bits existen ocho (8) registros de
propósito general, cada uno de los cuales tiene un tamaño de 32 bits. Estos
registros son: EAX, EBX, ECX, EDX, ESI, EDI, ESP y EBO. A pesar que se
denominan registros de propósito general, y pueden ser utilizados como tal, estos
registros tienen usos especiales para algunas instrucciones del procesador.

* Registros de segmento: Estos registros permiten almacenar apuntadores al


espacio de direcciones lineal. Los procesadores IA-32 poseen seis (6) registros de
segmento. Estos son: CS (código), DS (datos), ES, FS, GS (datos), y SS (pila). Su
uso depende del modo de operación. En modo real, los registros de segmento
almacenan un apuntador a la dirección lineal del inicio del segmento dividida en
16. En modo protegido se denominan selectores’, y contienen un apuntador a una
estructura de datos en la cual se describe un segmento de memoria.

* Registro EFLAGS: Este registro de 32 bits contiene una serie de banderas (flags)
que tienen diversos usos. Algunas reflejan el estado del procesador y otras
controlan su ejecución.

Existen instrucciones específicas para modificar el valor de EFLAGS.

* Registro EIP: Este registro almacena el apuntador a la dirección lineal de la


siguiente instrucción que el procesador debe ejecutar.

* Registros de control: El procesador posee cinco (5) registros de control CR0 a


CR5. Estos registros junto con EFLAGS controlan la ejecución del procesador.
* Registros para el control de la memoria: Estos registros apuntan a las estructura
de datos requeridas para el funcionamiento del procesador en modo protegido.
Ellos son: GDTR, IDTR, TR y LDTR.

* Registros de depuración: Estos registros contienen información que puede ser


usada para depurar el código que está ejecutando el procesador. Los
procesadores IA-32 cuentan con ocho (8) registros de depuración, DR0 a DR7.

* Registros específicos: Cada variante de procesador IA-32 incluye otros registros,


tales como los registros MMX, los registros de la unidad de punto flotante (FPU)
entre otros.

Algunos registros de propósito general pueden ser sub-divididos en registros más


pequeños a los cuales se puede tener acceso. Esto permite la compatibilidad con
programas diseñados para procesadores anteriores.

La siguiente figura muestra la disposición de los bits (flags) dentro de registro


EFLAGS. Este registro almacena el estado y parte del control del procesador. El
manual de arquitectura de sistema de Intel ofrece una descripción detallada de
cada uno de los bits.
Los bits del registro EFLAGS se pueden clasificar en:

* Bits de estado: Reflejan el estado actual del procesador. Son bits de estado: OF,
SF, ZF, AF y PF.

* Bits de control: Controlan la ejecución del procesador. Dentro de EFLAGS se


encuentra el bit DF, que permite controlar la dirección de avance en las
operaciones sobre cadenas de caracteres.

* Bits del sistema: Los bits ID, VIP, VIF, AC, VM, RF, NT, IOPL, IF y TF son
usados por el procesador para determinar condiciones en su ejecución, o para
habilitar / deshabilitar determinadas características. Por ejemplo, estableciendo el
bit IF en 1 se habilitan las interrupciones, mientras un valor de 0 en este bit
deshabilita las interrupciones.

* Bits reservados: Estos bits marcados con un color diferente se reservan por la
arquitectura IA-32 para futura expansión. Deben permanecer con los valores que
se muestran en la figura (cero o uno). No se deben usar, ya que es posible que en
versiones posteriores de los procesadores IA-32 tengan un significado específico.
Los bits más importantes de CR0 desde el punto de vista de programación son el
bit 0 (Protection Enable – PE), y el bit 31 (Paging – PG). Estos permiten habilitar el
modo protegido y la paginación, respectivamente.

S-ar putea să vă placă și