Saltar al contenido

¿Cuántos registros hay en 8086/8088?

Andrés, parte de nuestro equipo, nos hizo el favor de redactar este tutorial porque conoce muy bien el tema.

Solución:

El 8086 y el 8088 son procesadores de 16 bits; cada uno de sus registros tiene 16 bits de ancho. (Algunas instrucciones tratan la combinación de DX y AX como un entero de 32 bits, como la entrada div y la salida mul).

Tenga en cuenta que el 8086 tiene un bus de datos de 16 bits; el 8088 tiene un bus de datos de 8 bits. (Por lo tanto, cargar / almacenar una palabra de 16 bits requiere 2 ciclos de bus. Las direcciones siguen siendo de 20 bits para ambos).

REGISTROS DE FINALIDAD GENERAL

La CPU 8086 tiene 8 registros de propósito general, cada registro tiene su propio nombre:

AX – el registro del acumulador (dividido en AH / AL):

Generates shortest machine code: short-form encodings exist
Arithmetic, logic and data transfer
One number must be in AL or AX
Multiplication & Division
Input & Output

BX: el registro de dirección base (dividido en BH / BL).

Offset address relative to DS by default

CX – el registro de conteo (dividido en CH / CL):

The LOOP instruction uses it implicitly as a counter
Repetitive operations on strings with the REP command
Count (in CL) of bits to shift and rotate

DX – el registro de datos (dividido en DH / DL):

DX:AX concatenated into 32-bit register for some MUL and DIV operations
Specifying ports in some IN and OUT operations

SI – registro de índice de fuente:

Can be used for pointer addressing of data
Used as source in some string processing instructions
Offset address relative to DS by default

DI – registro de índice de destino:

Can be used for pointer addressing of data
Used as destination in some string processing instructions as ES:DI
Offset address relative to DS outside of string instructions

BP – puntero base:

Primarily used to access parameters and locals on the stack
Offset address relative to SS

SP – puntero de pila:

Always points to top item on the stack
Offset address relative to SS (but can't be used in 16-bit addressing modes)
Should always points to word (byte at even address)
An empty stack will have SP = FFFEh

REGISTROS DE SEGMENTO

  • CS: apunta al segmento que contiene el programa actual.
  • DS: generalmente apunta al segmento donde se definen las variables.
  • ES – registro de segmento adicional, depende de un codificador definir su uso.
  • SS: apunta al segmento que contiene la pila.

Aunque es posible almacenar cualquier dato en los registros de segmento, esto nunca es una buena idea. Los registros de segmento tienen un propósito muy especial: apuntar a bloques de memoria accesibles.

Los registros de segmento funcionan junto con el registro de propósito general para acceder a cualquier valor de memoria. Por ejemplo, si quisiéramos acceder a la memoria en la dirección física 12345h (hexadecimal), podríamos configurar DS = 1230h y SI = 0045h. De esta manera podemos formar direcciones lineales de 20 bits, en lugar de solo 16 bits con un solo registro. (Esto se aplica en modo real; en modo protegido, la segmentación es diferente).

La CPU hace un cálculo de la dirección física multiplicando el registro de segmento por 10h y añadiéndole el registro de propósito general (1230h * 10h + 45h = 12345h):

La dirección formada con 2 registros se denomina dirección efectiva.
Por defecto, los registros BX, SI y DI funcionan con el registro de segmento DS;
BP y SP funcionan con el registro de segmento SS.
Otros registros de propósito general no pueden formar una dirección efectiva.
Además, aunque BX puede formar una dirección efectiva, BH y BL no pueden.

REGISTROS DE FINES ESPECIALES

IP – el puntero de instrucción:

Always points to next instruction to be executed
Offset address relative to CS

El registro IP siempre trabaja junto con el registro del segmento CS y apunta a la instrucción que se está ejecutando actualmente.

REGISTRO DE BANDERAS

Registro de banderas: determina el estado actual del procesador. Son modificados automáticamente por la CPU después de operaciones matemáticas, esto permite determinar el tipo de resultado y determinar las condiciones para transferir el control a otras partes del programa. Generalmente, no puede acceder a estos registros directamente.

Carry Flag (CF) - this flag is set to 1 when there is an unsigned overflow. For example when you add bytes 255 + 1 (result is not in range 0...255). When there is no overflow this flag is set to 0.
Parity Flag (PF) - this flag is set to 1 when there is even number of one bits in (the low 8 bits of a) result, and to 0 when there is odd number of one bits. 
Auxiliary Flag (AF) - set to 1 when there is an unsigned overflow (carry-out) for low nibble (4 bits).
Zero Flag (ZF) - set to 1 when result is zero. For non-zero result this flag is set to 0.
Sign Flag (SF) - set to 1 when result is negative. When result is positive it is set to 0. (This flag takes the value of the most significant bit.)
Trap Flag (TF) - Used for on-chip debugging.
Interrupt enable Flag (IF) - when this flag is set to 1 CPU reacts to interrupts from external devices.
Direction Flag (DF) - this flag is used by some instructions to process arrays.  When this flag is set to 0 the processing is done forward, when this flag is set to 1 the processing is done backward.
Overflow Flag (OF) - set to 1 when there is a signed overflow. For example, when you add bytes 100 + 50 (result is not in range -128...127). 

Tomé el curso de Arquitectura de Computadoras y entendí que el procesador tiene 32 registros cada uno de 32 bits.

Esto no responde a su pregunta, pero si desea comunicarse con otro ingeniero, debe usar el lenguaje adecuado. Decir “un (algún) procesador tiene 32 registros que tienen un tamaño de 32 bits” no lo llevará a ninguna parte, hay innumerables cantidades de procesadores.

El 8086 tenía ocho (más o menos generales) registros de 16 bits, incluido el puntero de pila, pero excluyendo el puntero de instrucción, el registro de bandera y los registros de segmento. También se podía acceder a cuatro de ellos, AX, BX, CX, DX, como el doble de registros de 8 bits (ver figura), mientras que los otros cuatro, BP, SI, DI, SP, eran solo de 16 bits.

Supongo que la confusión proviene de esta oración en Wikipedia. Ambas fuentes que leíste tienen razón. Hay 8 registros de propósito general (en el artículo se indica como “más o menos general”, no tengo idea de quién podría escribir eso), son: AX BX CX DX y SI DI BP SP. También hay registros de segmento, registros de propósito especial y un registro de bandera (que se anotan después de la palabra “excluyente”, que, supongo, se supone que se lee como “hay registros, hay 8 de ellos si excluye estos 3 grupos “, es vago).

El problema está en la redacción. La oración citada es confusa y puedo ver de dónde proviene su pregunta. Nunca está de más preguntar, pero debes entender que Wikipedia no es una fuente confiable de conocimiento, si alguna vez estás confundido, simplemente toma un libro.

El 8086 tiene 14 registros de 16 bits. AX, BX, CX, DX, SI, DI, BP, SP, CS, DS, SS, ES, IP y el registro de banderas. A los dos últimos solo se accede de forma indirecta.

valoraciones y reseñas

Más adelante puedes encontrar las ilustraciones de otros usuarios, tú incluso eres capaz dejar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *