Los registros de la CPU constituyen una memoria de alta velocidad, y como tal tienen su propio mapa de
direcciones de memoria, donde se asigna una dirección o número a cada uno para poderlos identificar. Por
ejemplo, el VAX es una máquina con 16 registros generales nombrados de R0 a R15. Este conjunto de registros
formarán un bloque de memoria que para poder ser accedido habrá que direccionar mediante el campo
correspondiente dentro del formato de instrucción. Así, por ejemplo, una instrucción que sume el contenido de
R3 con R8 sería una instrucción de dos direcciones, aún cuando las direcciones no son de memoria central, sino
de registros de la CPU.
Veamos a continuación las diferentes maneras de realizar el direccionamiento. Como ejemplo de uso real de
cada una, usaremos instrucciones del microprocesador Z80. En el Z80 los mnemónicos de las instrucciones en
código máquina siempre son de la forma:
tipo de operación destino fuente
El Z80 es un microprocesador que posee un bus de direcciones de 16 bits, con lo que puede direccionar un
total de 64K bytes de memoria. A este campo de direcciones hemos de añadir los 22 registros internos que
posee la CPU:
• Un registro acumulador de 8 bits llamado A. Con él se realizarán las operaciones aritméticas y lógicas
de 8 bits.
• Seis registros de 8 bits de propósito general: B, C, D, E, H y L, que pueden ser utilizados en forma de
pares de registros para almacenar datos de 16 bits o también punteros a memoria. La única forma de
agrupar por pares estos registros es BC, DE y HL.
• Un registro de estado F. Este registro junto con el acumulador pueden formar un par de registros
llamado AF.
• Registros para guardar sólo direcciones:
o PC o contador de programa, de 16 bits,
o SP o puntero de pila, de 16 bits,
o IX e IY, registros de índice, de 16 bits,
o I, relacionado con la atención a las demandas de interrupciones, de 8 bits (almacena sólo los 8
bits más significativos del bloque de memoria en el que se encuentra el comienzo de la
subrutina de tratamiento de interrupciones).
Direccionamiento inmediato
La manera más simple de especificar un operando es que el campo de dirección de la instrucción contenga el propio operando, y entonces decimos que al código de operación le sigue un "literal".
Direccionamiento directo a registro
En el campo de dirección se especifica la dirección del registro donde se encuentra el operando o donde hay que dejar el resultado.
Direccionamiento directo a memoria
En el campo de dirección se especifica la dirección de memoria donde se encuentra el operando o donde hay que dejar el resultado.
Direccionamiento indirecto a registro
Direccionamiento indirecto a registro
En el campo de dirección se especifica la dirección del registro donde se encuentra la dirección de memoria en la que se encuentra el operando o donde hay que dejar el resultado.
Direccionamiento indirecto a memoria
En el campo de dirección se especifica una dirección de memoria, cuyo contenido es a su vez otra dirección de memoria, donde se encuentra el operando o donde hay que dejar el resultado.
Direccionamientos relativo a PC, de registro base e indexado
Estos tres tipos de direccionamiento comparten la forma de calcular la dirección del operando o donde se deja el resultado
Direccionamiento a pila
Toda la información necesaria para localizar los operandos o el destino está almacenada en unos registros especiales de la CPU que sirven para las operaciones sobre pila, y que veremos mas adelante. Como estos registros son únicos, no hace falta especificarlos en la instrucción, por lo que para las operaciones sobre pila no hace falta incluir un campo de dirección específico en la instrucción. Cuando hablamos de los diferentes tipos de formatos de instrucciones, dijimos que convenía hacer instrucciones lo más cortas posibles, con objeto de ahorrar tanto tiempo de CPU como espacio de memoria. El uso de este tipo de direccionamiento favorece esa reducción en las longitudes de la instrucción, al no necesitar campo de dirección.
Direccionamiento implícito
En este caso o bien el operando o bien la dirección del resultado están implícitos en el código de operación de la instrucción, no necesitando, por lo tanto, un campo de dirección en la instrucción para especificarlo.
Direccionamiento de bit (Z80)
El direccionamiento de bit es un mecanismo de acceso a bits específicos, ya sea de una determinada posición de memoria o de un registro en particular. Obviamente este tipo de direccionamiento sólo nos indicará si determinado bit de una posición de memoria es 1 ó 0. Recuérdese que para realizar este tipo de consultas se puede utilizar un mecanismo basado en máscaras, tal y como se vio en la lección dedicada a la UAL. Por ejemplo los microprocesadores de la familia del 8088 no poseen este tipo de instrucciones que utilicen direccionamiento de bit.


No hay comentarios.:
Publicar un comentario