Registros de Propósito General:
Son 4 registros de 16 bits, que
el programador usará para una diversidad de
funciones. Tienen varias características en
común:
- Pueden ejecutar la
mayoría de las operaciones del
procesador, incluyendo la generalidad de
las instrucciones aritméticas y
lógicas, salvo la multiplicación y
división.
- Se dividen lógicamente en
2 registros de 8 bits cada uno, llamados
parte alta y parte baja; refiriéndose el
registro de parte baja a los bits 0-7
(menos significativos) y la parte alta a
los bits 8-15 (más significativos).
- Pueden conectarse a los
registros de segmentos; de hecho, siempre
se hará acceso a los registros de
segmento a través de un registro de
propósito general, o de la pila.
Los 4 registros tienen su nombre propio y
ciertas especializaciones:
AX: Registro de
acumulador
Este registro es el más usado, siendo de
propósito general; y tiene ciertas
especializaciones, de ahí su nombre:
- Es el único que puede ser usado como
multiplicando en la multiplicación
- Es el único que puede ser usado como
dividendo en la división
- Es el parámetro que selecciona los
distintos servicios del Sistema
Operativo, usados mediante el mecanismo
de Interrupciones.
BX: Registro de Base
Este registro, además de las características
generales de los registros de propósito general,
se especializa
- en el acceso a memoria en combinación
con los registros de índice,
especialmente para el manejo de arreglos.
CX: Registro de
Contador
Este registro, como su nombre indica, será
ampliamente usado como contador. Puede ser usado
como cualquier registro de propósito general,
pero tiene capacidades especiales para ser usado
en instrucciones:
- de manejo de ciclos
- como contador en los corrimientos
- de manejo de memoria y strings
DX: Registro de
Datos
Este registro de propósito general tiene como
especializaciones:
- Formar con AX números de 32 bits, siendo
en este caso la parte más significativa.
- El acceso a puertos. Las instrucciones IN
y OUT, que permiten dicho acceso,
requerirán en ciertos casos que el
número de puerto esté en DX.
Registros
de Índice
Estos registros, de 16 bits, son muy similares
a los de propósito general, pero no tienen todas
las capacidades de los mismos; en particular:
- No pueden conectarse directamente con los
registros de segmentos.
- No pueden verse como dos registros de 8
bits (parte alta y parte baja).
Ahora bien, tienen sus propias habilidades.
Específicamente, están diseñados para
combinarse con los registros de segmento, ser
usados como desplazamientos y así intervenir en
el acceso a memoria. Se les usa, por ello, para
el acceso a arreglos o como apuntadores.
Los 4 registros que se consideran en este
grupo son:
SI: Source Index, o
Apuntador a la Fuente
Este registro se especializa en el acceso a
bytes o words dentro del segmento de datos;
existen instrucciones que lo toman por defecto
como el registro que apunta a una localidad de
memoria que se va a leer, por lo cual toma su
nombre.
DI: Destination
Index, Apuntador al Destino
Este registro se especializa en el acceso a
bytes o words dentro del segmento de datos o el
extra; existen instrucciones que lo toman por
defecto como el registro que en combinación con
el ES apunta a una localidad de memoria que se va
a escribir, por lo cual toma su nombre.
BP: Base Pointer, o
apuntador a la Base de la Pila.
Este registro es usado para accesar, dentro
del segmento de pila, la información.
Principalmente nos permite determinar cuando hay
un underflow, es decir, cuando se quiere sacar
más información de la pila que la que se ha
colocado en ella; y el acceso a variables locales
y parámetros.
SP: Stack Pointer, o
apuntador al tope de la Pila.
Este registro también está siempre asociado
al manejo de la pila. Su función especial es
marcar el tope de la pila, y por tanto, indica en
qué localidad de memoria se localiza la
información de la pila; se incrementa cuando se
hace un POP, con lo que apunta al siguiente
elemento en la pila; y se decrementa al hacer un
PUSH, con lo que controla el acceso a la memoria
de la pila.
ALU: Unidad Aritmética-Lógica
Este componente, como su nombre indica,
contiene la circuitería necesaria para realizar
las diversas operaciones aritméticas y lógicas.
Recibe sus operandos por el Bus A, y genera los
resultados regresándolos al mismo bus. Una
particularidad que es importante recalcar es su
conexión al registro de
banderas, por lo cual todas las
operaciones aritméticas y lógicas, de acuerdo a
su resultado, lo alterarán.
Registro
de Banderas:
Este es un registro de 16 bits, usados como
banderas. Esto quiere decir que cada uno de los
bits señala un evento dentro del procesador;
cuando el bit tiene un valor de 0, el evento no
ocurrió (falso); y cuando tiene un valor de 1,
el evento ocurrió (verdadero). Entre las
banderas más importantes mencionaremos:
ZF: Bandera de resultado 0
Se prende cuando el resultado de la última
operación realizada en el ALU fue un 0.
CF: Bandera de carry
Se prende cuando el resultado de la última
operación realizada en el ALU (necesariamente,
una suma o resta) generó un carry o un borrow.
OF: Bandera de overflow
Se prende cuando el resultado de la última
operación realizada en el ALU excedió la
capacidad del registro donde se almacena
(overflow).
SF: Bandera de signo
Se prende cuando el resultado de la última
operación realizada en el ALU fue negativo,
según la representación de complemento a 2 que
mencionamos en clases anteriores.
AF: Bandera de carry auxiliar
Se prende cuando el resultado de la última
operación realizada en el ALU generó un carry
cuando estaba a la mitad. Por ejemplo, si sumamos
dos números de 16 bits, nos indicará si la suma
de las partes bajas (primeros 8 bits) había
generado carry; si sumamos dos números de 8
bits, indica si el resultado intermedio después
de sumar los 4 bits menos significativos, generó
carry para sumarse a los bits 5.
DF: Bandera de dirección
A diferencia de las anteriores, esta bandera
no se prende como resultado del ALU, sino que el
programador la usa para controlar la dirección
del acceso mediante apuntadores, especialmente en
las instrucciones de strings.
IF: Bandera de interrupción
Se prende cuando el procesador es
interrumpido, y está ejecutando una rutina de
atención de interrupción. Esto evita que el
procesador acepte interrupciones mientras está
procesando interrupciones previas, de manera que
no se pierda el control del procesador.
|