REGISTROS INTERNOS DEL
MICROPROCESADOR
La Unidad Central de
Proceso (CPU, por sus siglas en inglés) tiene 14 registros internos cada uno de
16 bits. Los primeros cuatro, AX, BX, CX y DX, son de uso general
Y se pueden usar también
como registros de 8 bits. Es decir, AX se puede dividir en AH
Y AL (AH es el byte alto,
high, y AL es el byte bajo, low) Lo
mismo es aplicable a los
otros tres (BX en BH y
BL, CX en CH y CL y DX en DH y DL)
Estos son los únicos
registros que pueden usarse de modo dual (en 8 o 16 bits)
Los registros de la CPU
son conocidos por sus nombres propios, que son:
AX (acumulador)
BX (registro base)
CX (registro contador)
DX (registro de datos)
DS (registro del segmento
de datos)
ES (registro del segmento
extra)
SS (registro del segmento
de pila)
CS (registro del segmento
de código)
BP (registro de
apuntadores base)
SI (registro índice
fuente)
DI (registro índice
destino)
SP (registro del
apuntador de pila)
IP (registro del
apuntador de siguiente instrucción)
F (registro de banderas)
El registro AX se
usa para almacenar resultados, lectura o escritura desde o hacia los puertos.
El BX sirve como apuntador base o índice. El CX se utiliza en operaciones de
iteración, como un contador que automáticamente se incrementa o decremento de
acuerdo con el tipo de instrucción usada. El DX se usa como puente para el
acceso de datos.
El DS es un registro de
segmento cuya función es actuar como policía donde se encuentran los datos.
Cualquier dato, ya sea una variable inicializada o no, debe estar dentro de
este segmento. La única excepción es cuando tenemos programas del tipo *.com,
ya que en éstos sólo puede existir un segmento. El registro ES tiene el
propósito general de permitir operaciones sobre cadenas, pero también puede ser
una extensión del DS.
El SS tiene la tarea
exclusiva de manejar la posición de memoria donde se encuentra la pila (stack)
Esta es una estructura usada para almacenar datos en forma temporal, tanto de
un programa como de las operaciones internas de la computadora personal (PC, por sus siglas en
inglés) En términos de operación interna, la CPU usa este segmento para
almacenar las direcciones de retorno de las llamadas a rutinas. El registro de
segmentos más importante es el CS o segmento de código. Es aquí donde se
encuentra el código ejecutable de cada programa, el cual está directamente
ligado a los diferentes modelos de memoria. El registro BP (base pointer) se
usa para manipular la pila sin afectar al registro de segmentos SS. Es útil
cuando se usa interfaz entre lenguajes de alto nivel y el en-
LENGUAJE ENSAMBLADOR
DEL MICROPROCESADOR
LUIS URIETA PÉREZ Y PABLO
FUENTES RAMOS COMPUTACIÓN V
MICROPROCESADORES Y
MICROCOMPUTADORAS ensamblador. Puesto
que dicha interfaz se basa en el concepto de la pila BP, nos permite acceder parámetros pasados sin alterar el
registro de segmento SS. Los registros SI y DI son útiles para manejar bloques
de cadenas en memoria, siendo el primero el índice fuente y el segundo el
índice destino. En otras palabras, SI
representa la dirección donde se
encuentra la cadena y DI la dirección donde será copiada.
El registro SP apunta a
un área específica de memoria que sirve para almacenar datos bajo la estructura
LIFO (último en entrar, primero en salir), conocida como pila (stack) El registro IP (instrucción pointer)
apunta a la siguiente instrucción que será ejecutada en memoria. A continuación
se describe el significado de cada bit del registro F (banderas)
Todas las banderas
apagadas:
NV UP DI PL NZ NA PO NC
Todas las banderas
prendidas:
OV DN EI NG ZR AC PE CY
Significado de los bits:
Overflow NV = no hay
desbordamiento
Direction UP = hacia
adelante
Interrupts DI =
desactivadas
Sign PL = positivo
Zero NZ = no es cero
Auxiliary Carry NA = no
hay acarreo auxiliar
Parity PO = paridad non
Carry NC = no hay acarreo
OV = Sí lo hay
DN = hacia atrás
EI = activadas
NG = negativo
ZR = sí lo es
AC = hay acarreo auxiliar
PE = paridad par
CY = sí lo hay
El registro de banderas
es un registro de 16 bits, pero no todos los bits se usan.
PSW Contiene 9
banderas. Tres banderas de control TF, DF, IF y
seis banderas de status CF, PF, AF, ZF,
SF, OF.
Estas 6 últimas banderas
representan el resultado de una
operación aritmética o lógica. Permiten
al programa alterar el curso de ejecución basado en los valores lógicos que
almacenan.
https://docs.google.com/file/d/0BxraEIYzL2HWRVJUUml2WkUxVTA/edit?usp=sharing
Registros del CPU
En arquitectura de ordenadores, un registro
es una memoria de alta velocidad y poca capacidad, integrada en el microprocesador, que
permite guardar transitoriamente y acceder a valores muy usados, generalmente
en operaciones matemáticas.
Los
registros están en la cumbre de la jerarquía de memoria, y son la
manera más rápida que tiene el sistema de almacenar datos. Los registros se
miden generalmente por el número de bits que
almacenan; por ejemplo, un "registro de 8 bits" o un "registro
de 32 bits". Los registros generalmente se implementan en un banco de
registros, pero antiguamente se usaban bien estables
individuales, memoria SRAM o formas aún
más primitivas.
El término
es usado generalmente para referirse al grupo de registros que pueden ser
directamente indexados como operando de una instrucción, como está definido en
el conjunto de instrucciones. Sin
embargo, los microprocesadores tienen además muchos otros registros que son
usados con un propósito específico, como el contador de programa. Por
ejemplo, en la arquitectura IA32, el
conjunto de instrucciones define 8 registros de 32 bits.
Tipos de
registros
- Los registros de datos son usados
para guardar números enteros. En algunas computadoras antiguas, existía un
único registro donde se guardaba toda la información, llamado acumulador.
- Los registros de memoria son usados
para guardar exclusivamente direcciones de memoria. Eran muy usados en la arquitectura Harvard, ya que muchas veces las direcciones tenían un tamaño de palabra
distinto que los datos.
- Los registros de propósito general
(en inglés GPRs o General Purpose Registers) pueden guardar tanto
datos como direcciones. Son fundamentales en la arquitectura de von Neumann. La mayor parte de las computadoras modernas usa GPR.
- Los registros de coma flotante son
usados para guardar datos en formato de coma
flotante.
- Los registros constantes tienen
valores creados por hardware de sólo lectura. Por ejemplo, en MIPS el registro cero siempre vale 0.
- Los registros de propósito específico
guardan información específica del estado del sistema, como el puntero de
pila o el registro de estado.
http://es.wikipedia.org/wiki/Registro_(hardware)
REGISTROS
DEL PROCESADOR
Los
registros del procesador se emplean para controlar instrucciones en ejecución,
manejar direccionamiento de memoria y proporcionar capacidad aritmética. Los
registros son direccionales por medio de un nombre. Los bits por convención, se
numeran de derecha a izquierda, como en:
... 15 14 13
12 11 10 9 8 7 6 5 4 3 2 1 0
Los
registros internos del procesador se pueden clasificar en 6 tipos diferentes
1. Registros de
segmento
2. Registros de
propósito general
3. Registros de
apuntadores
4. Registros de
banderas
5. Registros de
Puntero de instrucción
6. Registros de
Pila
Registros de segmento
Registro CS. El DOS almacena la dirección inicial del segmento
de código de un programa en el registro CS. Esta dirección de segmento, más un
valor de desplazamiento en el registro apuntador de instrucción (IP), indica la
dirección de una instrucción que es buscada para su ejecución.
Registro DS. La dirección inicial de un segmento de datos de
programa es almacenada en el registro DS. En términos sencillos, esta
dirección, más un valor de desplazamiento en una instrucción, genera una
referencia a la localidad de un byte especifico en el segmento de datos.
Registró SS. El registro SS permite la colocación en memoria de
una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena
la dirección de inicio del segmento de pila de un programa en el registro SS.
Esta dirección de segmento, más un valor de desplazamiento en el registro del
apuntador de pila (SP), indica la palabra actual en la pila que está siendo direccionada.
Registros
ES. Algunas operaciones con cadenas
de caracteres (datos de caracteres) utilizan el registro extra de segmento para
manejar el direccionamiento de memoria. En este contexto, el registro ES está
asociado con el registro DI (índice). Un programa que requiere el uso del
registro ES puede inicializarlo con una dirección de segmento apropiada.
Registros FS
y GS. Son
registros extra de segmento en los procesadores 80386 y posteriores.
Registros de
propósito general.
Registro AX. El registro
AX, el acumulador principal, es utilizado para operaciones que implican
entrada/salida y la mayor parte de la aritmética. Por ejemplo, las
instrucciones para multiplicar, dividir y traducir suponen el uso del AX.
También, algunas operaciones generan código más eficiente si se refieren al AX
en lugar de a los otros registros.
Registro BX. El BX es
conocido como el registro base ya que es el único registro de propósito general
que puede ser índice para direccionamiento indexado. También es común emplear
el BX para cálculos.
Registro DX. El DX es
conocido como el registro de datos. Algunas operaciones de entrada/salida
requieren uso, y las operaciones de multiplicación y división con cifras
grandes suponen al DX y al AX trabajando juntos.
Registro de
Apuntador de Instrucciones.
En el ejemplo siguiente, el registro CS contiene 25A4
[0] H y el IP contiene 412H. Para encontrar la siguiente instrucción que será
ejecutada, el procesador combina las direcciones en el CS y el IP:
Segmento de dirección en el registro CS: 25A40H
Desplazamiento de dirección en el registro IP: + 412H Dirección de la siguiente
instrucción: 25E52H
Registros
Apuntadores.
Registro SP. El
apuntador de la pila de 16 bits está asociado con el registro SS y proporciona
un valor de desplazamiento que se refiere a la palabra actual que está siendo
procesada en la pila. Los procesadores 80386 y posteriores tienen un apuntador
de pila de 32 bits, el registro ESP. El sistema maneja de forma automática
estos registros.
En el ejemplo siguiente, el registro SS contiene la
dirección de segmento 27B3 [0] H y el SP el desplazamiento 312H. Para encontrar
la palabra actual que está siendo procesada en la pila, la computadora combina
las direcciones en el SS y el SP:
Registro BP. El BP de 16
bits facilita la referencia de parámetros, los cuales son datos y direcciones
transmitidos vía pila. Los procesadores 80386 y posteriores tienen un BP
ampliado de 32 bits llamado el registro EBP.
Registros Índice.
Registro SI. El registro
índice fuente de 16 bits es requerido por algunas operaciones con cadenas (de
caracteres). En este contexto, el SI está asociado con el registro DS. Los
procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32
bits, el ESI.
Registro DI. El registro
índice destino también es requerido por algunas operaciones con cadenas de
caracteres. En este contexto, el DI está asociado con el registro ES. Los
procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32
bits, el EDI.
Registro de
Banderas.
OF (Overflow, desbordamiento). Indica
desbordamiento de un bit
De orden alto (mas a la izquierda) después de una
operación aritmética.
DF (dirección). Designa la
dirección hacia la izquierda o hacia la derecha para mover o comparar cadenas
de caracteres.
IF (interrupción). Indica que
una interrupción externa, como la entrada desde el teclado, sea procesada o
ignorada.
TF (trampa). Permite la
operación del procesador en modo de un paso. Los programas depuradores, como el
DEBUG, activan esta bandera de manera que usted pueda avanzar en la ejecución
de una sola instrucción a un tiempo, para examinar el efecto de esa instrucción
sobre los registros de memoria.
SF (signo). Contiene el
signo resultante de una operación aritmética (0 = positivo y 1 = negativo).
ZF (cero). Indica el
resultado de una operación aritmética o de comparación (0 = resultado diferente
de cero y 1 = resultado igual a cero).
AF (acarreo auxiliar). Contiene un
acarreo externo del bit 3 en un dato de 8 bits para aritmética especializada.
PF (paridad). Indica
paridad par o impar de una operación en datos de 8 bits de bajo orden (mas a la
derecha).
CF (acarreo). Contiene el
acarreo de orden más alto (mas a la izquierda) después de una operación
aritmética; también lleva el contenido del ultimo bit en una operación de
corrimiento o de rotación. Las banderas están en el registro de banderas en las
siguientes posiciones:
Las banderas más importantes para la programación
en ensamblador son O, S, Z y C, para operaciones de comparación y aritméticas,
y D para operaciones de cadenas de caracteres. Los procesadores 80286 y
posteriores tienen algunas banderas usadas para propósitos internos, en
especial las que afectan al modo protegido. Los procesadores 80286 y
posteriores tienen un registro extendido de banderas conocido como Eflags.
Registros de
PILA
-SP- Stack Pointer: Se traduce
como puntero de pila y es el que se reserva el procesador para uso propio en
instrucciones de manipulado de pila. Por lo general, el programador no debe
alterar su contenido.
-BP- Base pointer: Se usa como
registro auxiliar. El programador puede usarlo para su provecho.
Claro que estos nombres y tipos de registros son
estándar, ya que cada fabricante puede utilizar otros registro que reemplacen a
estos o los auxilien, aun así, los fabricantes que usan otros registro tienen
la misma función que los anteriormente mencionados
Ejemplo
Registros de uso general del 8086/8088:
Tienen 16 bits cada uno y son ocho:
1. 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.
2. 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.
3. 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).
4. 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).
5. 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.
6. BP = Puntero
base (no se puede subdividir). Generalmente se utiliza para realizar direccionamiento
indirecto dentro de la pila.
7. SI = Puntero
índice (no se puede subdividir). Sirve como puntero fuente para las operaciones
con cadenas. También sirve para realizar direccionamiento indirecto.
8. 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
Indicadores
(flags)
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.
El
procesador Z80
El Z80 posee 14 registros de propósito general de 8
bits denominados A, B, C, D, H, L y A', B', C', D', H’, L'. Solamente un set de
siete registros y el correspondiente registro de Flags F pueden estar activos
al mismo tiempo. Una instrucción especial selecciona A y F o A' y F' mientras
que otra instrucción selecciona B, C, D, E, H, L o C', D', E’, H’ L'.
El programador puede cambiar rápidamente de un
conjunto de registros de propósito general a otro. Esto proporciona una mayor
capacidad de almacenamiento en registros. El acceso a datos presentes en
registros de la CPU es mucho más rápido que el acceso a datos en memoria.
Los registros pueden agruparse de a pares formando
registros de 16 bits. Estos son los pares BC, DE y HL (sus equivalentes primas
también pueden agruparse).
Flags
Aunque los Flags existen físicamente dentro de la
CPU están agrupados lógicamente formando un registro. Los Flags del Z80 son los
siguientes:
Flag de Cero (Z): Toma el valor 1 si el resultado
de una operación es cero. Es el bit seis.
Flag de signo(S): Toma el valor 1 si el resultado
de una operación es negativo. Es el bit siete.
Flag de Carry(C): Este flag es afectado por las
instrucciones de desplazamiento y es puesto en 1 ó 0 según el valor del bit
desplazado. También es afectado por las operaciones aritméticas. Este flag es
el bit cero.
Flag de Paridad y overflow(P/V): En el caso de
paridad, se pone en 1 si el resultado de una operación posee un número par de
unos. Cuando el flag P/V se usa para representar overflow, el flag se pone en 1
si ocurre un overflow después de una operación aritmética. Este flag es el bit
2.
Flag H y N: Son dos Flip Flop que no pueden ser
examinados por las instrucciones de salto condicional. El Z80 los usa para las
operaciones BCD. H representa el rebalse que genera considerando los cuatro
bits menos significativos del resultado y N es el flag de resta, el cual se activa
para indicar si la última instrucción ejecutada fue suma o resta. En el caso
general, una instrucción de resta coloca en 1 el flag N y una instrucción de
suma lo coloca en 0. Los Flags H y N son los bits 4 y 1 respectivamente.
Registros de propósito especial
Program Counter:
Es un registro de 16 bits que indica la dirección
de la próxima instrucción ejecutar. Las instrucciones del Z80 pueden contar de
uno, dos, tres o cuatro bytes.
Stack-Pointer:
Es un registro de 16 bits que indica la dirección
de una memoria RAM externa denominada Stack. El objetivo de esta área de
memoria es proporcionar un medio de almacenamiento temporal de los registros
del usuario, registro de Flags y del program Counter. La provisión de Stack es
fundamental para operaciones tales como los llamados a sub-rutinas e
interrupciones.
Registros índices IX e IY: Estos
registros son de 16 bits, diseñados para permitir un direccionamiento indexado
en los programas del Z80. Cuando se ejecuta una instrucción en un modo de
direccionamiento indexado, se usa uno de los dos registros índices para
calcular la dirección del operando.
Registro de interrupciones I: Es un
registro de 8 bits que puede ser cargado para especificar el byte más
significativo de una dirección de memoria. El byte menos significativo es
proporcionado por el dispositivo que solicita la interrupción.
Registro de refresh de memoria R: Es un
registro especial diseñado para proporcionar un refresh automático de las
memorias RAM dinámicas.
Registro de instrucciones:
El registro de instrucciones tiene por misión
almacenar el código de operación de la instrucción leída desde memoria. Este
código es descodificado y con esta información se dirigen todos los
micro-pasos.
https://docs.google.com/file/d/0BxraEIYzL2HWdlhWRmpwb2xiT0U/edit?usp=sharing&pli=1
No hay comentarios:
Publicar un comentario