Está en la página 1de 18

UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO

DE ARQUITECTURA
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN
DE SISTEMAS Y
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II APLICACIONES

3 DISEÑO DEL CONJUNTO DE INSTRUCCIONES

3.1 INSTRUCCIÓN Y CONJUNTO DE INSTRUCCIONES


La principal especificación arquitectónica de una computadora o su procesador es quizás el conjunto
de instrucciones, pues éste define las operaciones que puede realizar el procesador y establece cómo el
programador puede instruir su ejecución. Bien podría decirse que el repertorio de instrucciones es la
“identidad” del procesador o su lengua, pues cada arquitectura de procesador diferente tiene un conjunto de
instrucciones diferente. Solo aquellos procesadores que comparten el mismo conjunto de instrucciones
pueden ejecutar los mismos programas, y por tanto se dice de ellos que pertenecen a una misma “familia de
arquitecturas”

3.1.1 Conjunto de Instrucciones

Podemos decir que las instrucciones son comandos que indican al procesador qué operación ejecutar
en cada momento y con cuales operandos. Se denomina conjunto o repertorio de instrucciones a todas las
posibles instrucciones para un procesador específico. El diseño del conjunto de instrucciones es el punto de
partida de toda arquitectura de computadoras.

Es deseable que el conjunto de instrucciones del CPU cumpla con las siguientes características:

Completitud: El conjunto de instrucciones debe permitir ejecutar todas las operaciones


que es capaz de realizar el procesador.
Ortogonalidad: Debe permitir que todas las operaciones se realicen con todos los tipos de
datos que aplican para la misma.
Eficiencia: Debe permitir ejecutar todas las operaciones del procesador pero sin
redundancias. Si ya una operación puede realizarse con una instrucción x
no es eficiente que exista una instrucción y para la misma operación.

3.1.2 Instrucción

Denominamos instrucción a un tipo especial de dato que se emplea para ordenar al CPU que ejecute
una de las operaciones que puede realizar. En términos generales, la instrucción debe tener información
acerca del tipo de operación a realizar, con qué operandos, dónde poner el resultado (si la operación genera
alguno) y alguna forma de obtener la próxima instrucción. En las máquinas del tipo Von Neumann, que son
máquinas secuenciales, se supone que la próxima instrucción está contigua en la memoria. En este caso, la
información de próxima instrucción es implícita. Este esquema de secuenciamiento requiere de un puntero o
contador de programa que se incremente de forma automática para que siempre señale a la próxima
instrucción a ejecutar. Para estos propósitos se emplea un registro del CPU denominado normalmente PC
(Program Counter).

Una instrucción debe, por tanto, determinar: la Operación a ejecutar y los Operandos (tanto fuentes como
destino) a emplear en la misma. El secuenciamiento implícito se puede cambiar mediante instrucciones de
salto que permiten modificar el PC. Los Operandos pueden especificarse de forma explícita o implícita

Docente: Ing. José Díaz Chow Página 1


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN DE
ARQUITECTURA
Y SISTEMAS
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II

(cuando están sobreentendidos) en la instrucción. Por ejemplo, las instrucciones de salto no hacen referencia
al PC pero está sobreentendido que éste es el destino de esas operaciones.

Los operandos pueden residir en registros internos del procesador o en la memoria. Los operandos fuentes
también se pueden especificar directamente en la instrucción. Las diferentes formas de obtener los
operandos desde donde residan se denominan modos de direccionamiento. Los operandos que residen en
memoria pueden especificarse mediante muchos diferentes modos de direccionamiento.

3.1.3 Clasificación de las Instrucciones

Podemos clasificar las instrucciones en categorías o tipos de acuerdo a la operación que realizan. En
la tabla a continuación se presenta un cuadro sinóptico con el detalle de esta clasificación.

Tipo Categoría Uso Ejemplos


Propósito General Transferencia Mover datos entre operandos MOVE, LOAD,
( puede ser R-R, R-M). STORE
* Cambios en los tamaños y extensión de
Signo

Aritméticas Operaciones aritméticas. ADD, SUB, DIV,


MULT, INC, DEC

Lógicas y manejo de Operaciones lógicas, de comparación y AND, OR


bits (bitwise) corrimiento de bits. RSHIFT, NOT

De Comparación Operaciones que comparan los valores de CMP


los operandos. Sirven de base para las de
saltos

Control de flujo de Permite modificar la secuencia del JP, JR, BRN, CALL,
Programa programa para implementar sentencias de RET
selección, ciclos y llamadas a subrutinas.

E/S Permite el acceso a direcciones del IN, OUT


espacio de E/S. (Más adelante se
explicará que hay ordenadores que usan
las de transferencia cuando el Mapa de
E/S está Integrado a M)

Propósito Tratamiento de Manipulación de cadenas COMSTR, CATSTR


Específico Cadenas (Strings)

Polinomios y Para aplicaciones científicas. La EVALUATEPOL,


funciones científicas, instrucción implementada en Hardware VADD
Vectores y Matrices acelera la ejecución. También se
consideran datos especiales como
Vectores, Listas y Matrices
Privilegiadas Interrupciones y Solicitud de atención de los dispositivos INT, Trap
Excepciones de E/S y Tratamiento de condiciones
anormales del procesador

De control del Protección de Memoria, Detención del HALT, NOP


Sistema programa, reinicio o detención del
ordenador, etc.

Página 2 Docente: Ing. José Díaz Chow


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
DE ARQUITECTURA
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN
DE SISTEMAS Y
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II APLICACIONES

3.1.4 Filosofías de Diseño del Conjunto de instrucciones

Existen básicamente dos filosofías en torno al diseño del conjunto de instrucciones. Al inicio, el
diseño de las computadoras estaba orientado a proveer al programador con el mayor posible conjunto de
instrucciones con muchas formas de obtener los operandos (modos de direccionamiento), lo cual iba
haciendo el hardware cada vez más complejo y mayor el recargo de trabajo para la decodificación y ejecución
de las instrucciones. Un estudio reveló que era muy reducido el conjunto de éstas que en realidad se
utilizaban y se propuso una nueva filosofía de diseño, basada en el conjunto de instrucciones reducido que
realmente era utilizado con frecuencia y simplificar los modos para reducir la complejidad del hardware y
mejorar el desempeño. Esta corriente filosófica se denominó RISC (Computadora de conjunto reducido de
instrucciones) y a las máquinas con la tendencia de conjunto muy amplio, anteriores a ella se llamó CISC
(Computadoras con conjunto complejo de instrucciones).

A continuación, se presenta un cuadro comparativo de estas dos tendencias.

RISC CISC

Pocos formatos de instrucciones y sencillos Muchos formatos muy complejos que


permiten decodificador rápido y control normalmente requieren unidad de control
cableado. microprogramada.

Las operaciones de cálculo son registro- Las operaciones permiten operandos en


registro. Instrucciones específicas de carga y memoria.
almacenamiento.

Usan la mínima cantidad de modos de Buscan permitir la máxima cantidad de modos


direccionamiento. de direccionamiento.

Programas largos pero sencillos. Programas cortos pero complejos.

Más fácil de segmentar por su sencillez. Más difícil de segmentar y controlar.

Mayor rapidez de ejecución. Ejecución más lenta (complejidad + UC Prog)

Docente: Ing. José Díaz Chow Página 3


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN DE
ARQUITECTURA
Y SISTEMAS
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II

3.2 FORMATO DE INSTRUCCIONES


Una instrucción es un tipo de dato especial que se almacena en la misma memoria en que se
almacenan los datos y de la misma forma, por tanto es una cadena de bits. Lo importante es que estos bits
están organizados de cierta forma para almacenar la información que debe proveer la instrucción. Tal
organización se denomina Formato de instrucción. Este define el tamaño de la instrucción y los campos de
información de la misma.

El formato de instrucción puede ser fijo o variable. En el primero, el tamaño de la instrucción es


estático, por ejemplo, siempre de 32 bits. En el segundo el tamaño depende de la instrucción y puede ser de
una palabra, dos o más. Por ejemplo, el Z80 tiene formatos de 1, 2 y 3 bytes.

El formato de instrucción, por lo general se organiza en campos. Cada campo posee un tipo de información,
algunas arquitecturas, sin embargo, tienen campos compuestos y otras mezclan información en un mismo
campo. Ejemplos: MIPS siempre mantiene un mismo código de operación para el tipo de instrucción y
mantiene un campo fijo para cada operando, mientras la familia ix86 tiene un código de operación diferente
por cada tipo y cantidad de operandos de la misma operación.

El formato de instrucción debe contener toda la información de la instrucción o la forma de obtenerla,


básicamente:
- Operación a realizar
- Fuente(s): Dependen del tipo de operación (unaria o binaria)
- Destino: Dónde poner el resultado. A veces está implícito ( ADD A, B ; B  A + B )
- Secuenciamiento: Necesidad de conocer la dirección de la próxima instrucción. Por lo general está
implícito (en las arquitecturas de máquina secuencial) pero a veces se permite cambiar el flujo de
programa afectando al PC mediante instrucciones de ramificación (en este caso el direccionamiento
puede ser absoluto o relativo).

Nominalmente, el Formato de instrucción, al cual llamaremos F, se compone de Dos partes:

- Identificación de la operación: COP o CO: Código que identifica la operación.


- Direccionamiento: Operandos fuentes y destino.

IDENTIFICACION DIRECCIONAMIENTO

CO OP1 OP2 … OPn

MD VALOR(ES)

Figura 2.4 Estructura del Formato de Instrucción

Página 4 Docente: Ing. José Díaz Chow


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
DE ARQUITECTURA
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN
DE SISTEMAS Y
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II APLICACIONES

3.3 CODIGO DE OPERACIÓN


Es necesario codificar las instrucciones del conjunto de instrucciones a fin que la unidad de control
pueda identificar de forma única cada instrucción y proceder de acuerdo a la especificación de la misma. La
parte del formato de instrucción que mantiene esta información se denomina bloque de identificación y está
conformado por lo general de un único campo llamado Campo de Código de Operación (CO o COP).

3.3.1 Codificación de bloque fijo


¿Cómo podemos proceder para asignar códigos a las instrucciones? es decir, ¿cómo podemos codificar el
CO? Existen varias técnicas, la más simple consiste en asignar a cada instrucción una de las combinaciones
posibles de un patrón binario. A esta técnica se le conoce como Técnica de Bloque fijo. Para codificar n
instrucciones se requieren log2(n) bits. Por ejemplo, para codificar 13 instrucciones 4 bits son requeridos.

nota: n = n (I); n es la cardinalidad del conjunto I o conjunto de instrucciones.

Ventajas: Muy fácil de entender


Decodificado fácil de implementar

Desventajas: Cuando el número de instrucciones no es cercano a la potencia (5 bits para 18)


Tenemos desperdicio o a veces diseños muy costosos (al integrar el resto del
Formato)

3.3.2 Codificación de bloque expandido

Otra técnica empleada es la Técnica de bloque expandido. Esta se basa en el hecho que no todas las
instrucciones usan todos los campos de direccionamiento. Se pueden identificar grupos de 3, 2, 1 y 0
operandos, entonces, se pueden emplear pocos bits para el CO de las instrucciones de más operandos y en el
nuevo grupo usar los bits del operando que no ocupará el anterior para “expandir” el CO a más bits.

Ejemplo: ¿Cuántos bits ( L o longitud) se requieren para el formato de instrucciones de una máquina hipotética, si se tienen
que codificar 15 diferentes instrucciones cada una de 2 operandos, donde el operando fuente 1 asume como destino de la
operación y cada operando requiere 6 bits para codificarse?

L (F) = ?
n = 15 L (CO) = log2(15) = 4 bits
L (F) = L (CO) + 2 * L (Op) = 4 + 2 * 6 = 16 bits

*Nótese que aquí la longitud de los operandos es constante, existen máquinas donde no ocurre lo mismo.

Suponga, ahora que además de las 15 de 2 operandos requiero 30 de 1 operando. ¿Cuántos bits se
requieren?

n = 15 + 30 = 45 L (CO) = log2(45) = 6 bits

En este nuevo escenario, la instrucción pasa a tener un total de 18 bits. Note que esto genera un
problema interesante, pues si la resolución de la memoria es de un byte y no de palabras de 18 bits, el
tamaño de instrucción deberá escalar a 3 * 8 = 24 bits, desperdiciando 6 bits en el formato. Esto no siempre

Docente: Ing. José Díaz Chow Página 5


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN DE
ARQUITECTURA
Y SISTEMAS
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II

es malo, en términos de rendimiento, pero puede ser un inconveniente en cuanto a ahorro de espacio en
disco y memoria.

Para evitar el desperdicio del ejemplo anterior, se podría usar la técnica de bloque expandido, así los
6 bits que libera el segundo operando en este nuevo grupo, se pueden emplear para “expandir” el CO. Es
importante que queden algunas combinaciones libres del primer formato para poderlas usar como llave que
nos indique que esa combinación es expandida. En esta caso queda la combinación 1111. Así el decodificador
sabrá que cuando aparezca ésta encabezando el CO, éste será de 4 + 6 = 10 bits.

CO O2 O1
0000 xxxxxx xxxxxx
… … … 15 inst. de 2 operandos
1110 xxxxxx xxxxxx
1111

1111 000000 xxxxxx


… … … 30 inst. de 1 operando
1111 011101 xxxxxx

Nótese que con este formato, no se requieren más bits para codificar las nuevas 30 instrucciones.

* Asignación: Verifique cuántas instrucciones de 0 operandos podrían caber en el formato

Página 6 Docente: Ing. José Díaz Chow


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
DE ARQUITECTURA
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN
DE SISTEMAS Y
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II APLICACIONES

3.3.3 Codificación Huffman

La tercera técnica, se basa en la teoría estadística de la comunicación y está orientada a minimizar


la longitud del CO de las instrucciones más frecuentes. Ésta de denomina Técnica de Codificación de
Huffman. La técnica expandida asume que todas las instrucciones son usadas con la misma probabilidad,
pero realmente en la práctica esto no es así, ya que en un programa de acumulador, el 40% de las
instrucciones son LOAD y STORE, por ejemplo. La técnica de Huffman codifica el CO de las instrucciones
usadas mas frecuente con menos bits y las usadas menos frecuentemente con más bits. Esto permite que
el número promedio de bits necesarios para codificar un programa típico sea óptimo.

Ejemplo: Supongamos que se desea codificar el conjunto de instrucción hipotético mostrado en la tabla
siguiente:
Nemónicos de Contador de Frecuencia Relativo
Instrucciones
LOAD 1/4
STO 1/4
ADD 1/8
AND 1/8
NOT 1/16
RSHIFT 1/16
JUMP 1/16
HALT 1/16

Los valores del contador de frecuencia relativa se obtienen inspeccionando la ocurrencia de cada
Instrucción en un conjunto de programas representativos. En ésta técnica podemos especificar un
algoritmo para crear los Códigos para cada CO de cada instrucción. Primero se ordenan las instrucciones
en función de su frecuencia relativa o probabilidad de ocurrencia, de mayor a menor de izquierda a
derecha. Segundo, se asigna a cada nemónico de Instrucción un nodo etiquetado con el contador de
frecuencia relativa correspondiente (figura a continuación)

LOAD STO ADD AND NOT RSHIFT JUMP HALT

¼ ¼ 1/8 1/8 1/16 1/16 1/16 1/16

Tercero: Asociar los nodos con el menor peso siempre, mediante la operación suma para genera nuevos
nodos hasta que no queden posibles asociaciones. La figuras 2.8 a, b y c muestran este proceso.

Cuarto: Las ramas derechas del árbol obtenido son etiquetadas con “0” y las izquierdas con “1” (Figura 2.8 c).
Quinto: Para encontrar el código de operación correspondiente de determinada instrucción se hace un
camino desde la raíz hasta el nodo del mnemónico correspondiente. Por ejemplo el CO de la instrucción
RSHIFT es 0010. En la figura 2.8 se puede apreciar todos los pasos y en la taba que le sigue se resumen los
CO para todo el Conjunto de instrucciones del ejemplo.

Docente: Ing. José Díaz Chow Página 7


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN DE
ARQUITECTURA
Y SISTEMAS
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II

LOAD STO ADD AND NOT RSH JUMP HALT

1/4 1/4 1/8 1/8 1/16 1/16 1/16 1/16

a) 1/8

LOAD STO ADD AND NOT RSH JUMP HALT

1/4 1/4 1/8 1/8 1/16 1/16 1/16 1/16

1/8 1/8
b)

LOAD STO ADD AND NOT RSH JUMP HALT

1/4 1/4 1/8 1/8 1/16 1/16 1/16 1/16

1 0 1 0 1 0 1 0

1/2 1/4 1/8 1/8

1 0

1/4

1 0

1/2

1 0

c)
1/2

MNemónico CO Camino desde la Raíz.


LOAD 11 izquierda-izquierda
STO 10 izquierda-derecha
ADD 011 der-izq-izq
AND 010 der—izq—der
NOT 0011 der—der—izq—izq
RSHIFT 0010 der—der—izq—der
JUMP 0001 der—der—der—izq
HALT 0000 der—der—der—der

Página 8 Docente: Ing. José Díaz Chow


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
DE ARQUITECTURA
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN
DE SISTEMAS Y
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II APLICACIONES

Se puede apreciar que el procedimiento de Huffman codifica con menos bits las instrucciones
mas frecuentes usadas y con más bits las menos usadas. El número promedio de bits necesarios por
instrucción pueden ser calculados usando la formula:
n
longitud CO med  LA   li . f i
i 1

Donde li es la longitud en bits de la instrucción i y fi es la frecuencia relativa de la instrucción i.

Para nuestro ejemplo, entonces:

longitud(CO)med = 2(1/4 )+2(1/4) + 3(1/8) +3(1/8) + 4(1/16) + 4(1/16 )+ 4(1/16) + 4(1/16)

=1+¾+1

= 2.75 bits.

Aplicando esta formula al esquema de codificación de bloque donde cada instrucción será codificada
con tres bits:

L (CO)med = 3(1/4) + 3(1/4) + 3(1/8) + 3(1/8) +3(1/16) + 3(1/16) + 3(1/16) + 3(1/16)

= 3/2 + ¾ + ¾

= 3 bits.

El número óptimo de bits para la codificación de un conjunto de mensaje es:


n
longitud CO optima  LO   f i . log 2  f i 
i 1

Para nuestro ejemplo:

LO = – [2*(1/4)*log2(1/4) + 2*(1/8)*log2(1/8) + 4*(1/16)*log2(1/16)]

LO = 2.75 bits.

La diferencia entre la longitud promedio actual y la longitud óptima sobre la longitud actual es llamada
Redundancia. Ésta mide el grado de desperdicio en el uso de bits para codificar el mensaje y se calcula
así:

R = LA - LO
LA

Docente: Ing. José Díaz Chow Página 9


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN DE
ARQUITECTURA
Y SISTEMAS
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II

Calculando el desperdicio se nota que en el esquema de Huffman la redundancia es igual a cero, y para el
esquema de código de bloque hay una redundancia de 8.33%.

R = (2.75 - 2.75) / 2.75 = 0 Técnica de Huffman

R = (3 - 2.75) / 3 = 0.083 (8.33%) Técnica de Bloque.

El esquema de Huffman lleva a cabo un resultado óptimo manteniendo la redundancia a un valor mínimo
sin embargo los códigos de operación son de tamaño variable, lo cual puede complejizar la construcción
del decodificador. La codificación de código de bloque fijo toma espacio de memoria extra pero es
ampliamente usado por su sencillo procedimiento de decodificación. La codificación de bloque extendido
también es muy usada cuando tenemos formatos de instrucción variable.

3.4 CAMPOS DE DIRECCIONAMIENTO


El bloque de direccionamiento en el Formato de Instrucción se compone de uno o varios campos de
dirección. Estos campos de dirección, especifican cómo y dónde obtener los operandos y donde guardar el
resultado. También se usan en instrucciones de saltos para definir la dirección de memoria de la próxima
instrucción.

Un campo de dirección se estructura de la forma:

MD V

 MD: Modo de direccionamiento o forma de determinar la dirección efectiva del operando.

 V (Valor): Dato que se emplea en el cálculo de la dirección efectiva del operando. Frecuentemente V
indica un registro, una dirección de memoria o un número. En los últimos casos, este valor puede ser
bastante grande, incluso, podrían no caber en un formato de instrucciones pequeño, por lo cual se
suelen emplear palabras adjuntas en la instrucción para dar cabida a estos valores. La figura abajo
muestra una de estas variantes.

Palabra de instrucción Palabra complementaria de V

CO MD1 V1 MD2 V2

El cálculo de la dirección efectiva del operando se obtiene combinando los valores del MD y V con el
estado del procesador. Esquemáticamente:

Página 10 Docente: Ing. José Díaz Chow


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
DE ARQUITECTURA
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN
DE SISTEMAS Y
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II APLICACIONES

MD V

CALCULO DE LA
DIRECCION
EFECTIVA
DIRECCION EFECTIVA
DEL OPERANDO

ESTADO DEL
PROCESADOR

3.5 MODOS DE DIRECCIONAMIENTO


El modo de direccionamiento es la forma o procedimiento que sigue el procesador para expresar dónde
se encuentra un operando y cómo obtenerlo. Un operando puede residir en memoria o en un registro del
procesador, pero los operandos fuentes además pueden definirse directamente en la instrucción.

Para los operandos en registros, la dirección efectiva del operando es el número, dirección o identificación
del registro. Los operandos en memoria, se pueden obtener de diferentes modos. El objetivo final es
obtener la dirección efectiva donde se almacena el operando en memoria. A continuación estudiaremos los
modos de direccionamiento más comunes.

3.5.1 Modo Inmediato

El valor del operando es especificado dentro de la misma instrucción. Realmente V es el valor mismo del
operando. En este caso no es necesario calcular dirección efectiva.

MD V = # ( operando )

Ventajas: Forma sencilla de obtención del operando.


Desventajas: Sólo permite operandos fuente y valores constantes.
Uso: Inicialización de variables y declaración de constantes.

Ejemplo: MOVE R10, 9 ; R10  9

3.5.2 Modo Directo, De Registro O Directo De Registro

El operando se encuentra en uno de los registros del procesador. En este caso el valor del operando es el
contenido del registro.

Docente: Ing. José Díaz Chow Página 11


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN DE
ARQUITECTURA
Y SISTEMAS
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II

MD r Modo de direccionamiento
Directo o Directo de Registro

BANCO DE
REGISTROS DEL
PROCESADOR
Dirección
Efectiva
OPERANDO
Rr

Ventajas: Rapidez de acceso. El operando ya está dentro del procesador.


Pocos bits para codificar los registros.
Desventajas: Si se necesita estar intercambiando el valor constantemente con una variable
en Memoria
Uso: Almacenar datos que se utilizan con mucha frecuencia.

Ejemplo: MOVE R10, R1 : R10  [R1]

3.5.3 Modo Absoluto O Directo De Memoria

La dirección efectiva del operando se especifica directamente en la instrucción. Regularmente se emplea


algún convencionalismo para diferenciar este modo del inmediato. Nosotros emplearemos paréntesis.

MD @ Modo de direccionamiento
Absoluto o Directo de Memoria

MEMORIA

Dirección
Efectiva
OPERANDO

Ventajas: Permite acceder a cualquier dirección de memoria.


No se requiere de cálculo adicional.
Desventajas: Requiere muchos bits para direccionamiento.
Requiere soporte en uso de estructuras de datos y programas portables.
Uso: Saltos absolutos, Rutinas fijas (sistema), paso de parámetros, puertos de E/S.

Ejemplo: MOV R10, (1800) ; R10  M(1800)


MOV R10, A ; R10  M(A)

Página 12 Docente: Ing. José Díaz Chow


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
DE ARQUITECTURA
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN
DE SISTEMAS Y
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II APLICACIONES

3.5.4 Modo Indirecto De Registro

El registro r contiene la dirección efectiva del operando.

MD r Modo de direccionamiento
Indirecto de Registro

BANCO DE
REGISTROS DEL
MEMORIA PROCESADOR
Rr
Dirección Efectiva

OPERANDO

Se pueden dar diferentes niveles de Indirección, según la arquitectura. Como ejercicio visualice el
diagrama gráfico para doble indirección.

Ventajas: Permite acceder a cualquier dirección de memoria usando pocos bits.


Flexibiliza el uso punteros, vectores y estructuras.
Desventajas: Requiere que se cargue la dirección al registro.
Limita el uso de registros para operandos.
Uso: Datos estructurados y paso de parámetros a subrutinas.

Ejemplo: MOV R10, (R1) ; R10  M (R1)

3.5.5 MODO INDIRECTO DE MEMORIA

El valor de V especifica la dirección de memoria en cuyo contenido está la dirección efectiva del operando.

MD @ Modo de direccionamiento
Indirecto de Memoria

MEMORIA

Dirección Efectiva

OPERANDO

Este modo no es muy frecuente, ni eficiente en la actualidad, sin embargo fue usado en antiguas
máquinas para automatizar punteros y acceso a estructuras de datos.

Ejemplo: MOV R10, ((1800)) ; R10  M( M(1800))

Docente: Ing. José Díaz Chow Página 13


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN DE
ARQUITECTURA
Y SISTEMAS
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II

3.5.6 MODO DE AUTOINCREMENTO

Este es un modo particularmente útil para trabajar con estructuras de datos estáticas. Está presente en
arquitecturas antiguas como la PDP/11. Son variantes del modo indirecto de registro. En el autoincremento,
la EA1 es el contenido del registro Rr. Una vez que se obtiene tal dirección el contenido del registro Rr se
incrementa en una constante k, que por lo general es 1.

MD r Modo de direccionamiento
de Autoincremento

BANCO DE MEMORIA
REGISTROS DEL
PROCESADOR

Rr
Dirección Efectiva OPERANDO Celda A

Celda A + k

Operando = M([ Rr ])
Rr = [ Rr ] + k

Por lo general k es el valor de la palabra o el tamaño de los operandos.

Ventajas: Acceso eficiente a elementos consecutivos en arreglos.


Desventajas: Cuando k es variable.

Ejemplo: ADD (R1)+, R0 ; R0 M( [R1] ) + R0, R1  [R1] + k

3.5.7 MODO DE AUTODECREMENTO

Es muy similar al de autoincremento, con la variante que el contenido de Rr se decrementa en lugar


de incrementarse y esta operación se hace antes de emplear la el contenido del registro en el cálculo de la
dirección. Es decir que EA = [Rr] – k.
MD r Modo de direccionamiento
de Autodecremento

BANCO DE MEMORIA
REGISTROS DEL
PROCESADOR
OPERANDO Celda A - k
Rr
A Celda A

1 EA: Effective Address, Dirección Efectiva.

Página 14 Docente: Ing. José Díaz Chow


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
DE ARQUITECTURA
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN
DE SISTEMAS Y
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II APLICACIONES

Rr = [ Rr ] - k
Operando = M( [ Rr ] )

Ejemplo: ADD -(R1), R0 : R1  [R1] - k , R0  M( [R1] ) + R0

Cabe mencionar que estos modos también tienen sus indirectos. Como tarea, visualice las operaciones que
se deber realizar para recuperar un operando en indirecto de autoincremento.

3.5.8 MODOS DESPLAZADOS

Existe una serie de modos muy flexibles que permiten realizar direccionamiento dinámico, lo cual es
muy útil para recorrer estructuras de datos, como arreglos de números o de estructuras. Estos modos
obtienen la dirección efectiva del operando calculándola mediante suma de registros y/o valores numéricos.
Por ejemplo, la dirección puede obtenerse sumando dos o más registros, o un registro y un valor numérico.
Existen casos complejos donde se incluye también escalación, en el cual uno de los valores es multiplicado
por una constante que normalmente representa el tamaño del elemento del arreglo que se desea recorrer.

En nuestro curso sólo enfocaremos algunos de ellos. Especial interés debe ponerse en el modo relativo,
donde el desplazamiento es relativo al valor de un registro. El desplazamiento relativo más útil es el relativo
al PC que se emplea en las instrucciones de salto.

3.5.9 MODO DE INDICE O INDIZADO

En este modo, el campo V tiene dos partes: Una dirección base (o registro base) y un registro índice.
Para calcular la dirección efectiva, se toma la dirección base y se le suma el contenido del registro índice.
Puede darse también el modo indirecto de índice. Se propone al lector interpretar el funcionamiento del
indirecto de índice.

MD r @base Modo de direccionamiento de


Indice

BANCO DE MEMORIA
REGISTROS DEL
PROCESADOR

Rr
Indice
+ OPERANDO

Operando = M( [ Rr ] + base )

Para que este modo sea eficiente se requiere tener facilidad de manipulación del registro de índice
por aparte. Por ejemplo: incrementar y decrementar el registro por una constante arbitraria k para el

Docente: Ing. José Díaz Chow Página 15


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN DE
ARQUITECTURA
Y SISTEMAS
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II

recorrido de las estructuras de datos estáticas o por diferentes valores específicos para estructuras de datos
variables.

Ventajas: Acceso eficiente a arreglos y estructuras en la memoria. Es considerado uno de los modos
más versátiles de acceso a memoria.
Desventajas: Precisa cargar y actualizar el índice por aparte.

Ejemplo: MOV R0, 1800(R1) ; R0  M(1800 + [R1])


MOV R0, R5(R1) ; R0  M([R5] + [R1])

3.5.10 MODO DE BASE - DESPLAZAMIENTO

Este modo es similar al anterior, el direccionamiento requiere dos partes: Un registro base y un valor de
desplazamiento. Para calcular la dirección efectiva, se toma la dirección contenida en el registro base y se le
suma con el desplazamiento. El valor del desplazamiento puede ser negativo o positivo. La diferencia con el
anterior es que éste último se usa cuando tenemos desplazamientos constantes, por ejemplo para acceso a
estructuras de datos.

MD r desplazamiento Modo de direccionamiento


Base + Desplazamiento

BANCO DE MEMORIA
REGISTROS DEL Dirección Base
PROCESADOR
desplazamiento
Rr
Base
+ OPERANDO

Operando = M( [ Rr ] + desplazamiento )

Ventajas: Acceso a estructuras de datos más eficiente. Cambiando el contenido de la


base se puede acceder al mismo elemento en cada estructura.
Permite desplazarse en un área de memoria cuyo punto de referencia es la dirección
base.
Permite desplazamientos fijos relativos a un punto móvil.
Desventajas: Precisa cargar y actualizar la base.

Ejemplo: MOV R0, R1(10) ; R0  M([R1] +10)

3.5.11 MODO DE DESPLAZAMIENTO CON ESCALACION:

Estos modos permiten involucrar varios registros y escalares en el cálculo de la dirección efectiva la cual
se realiza nos solo con suma sino además por multiplicación. Estos modos eliminan la necesidad de cálculo
del tamaño del operando en el índice por aparte. Así el índice solo se autoincrementa o decrementa por 1.

Página 16 Docente: Ing. José Díaz Chow


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
DE ARQUITECTURA
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN
DE SISTEMAS Y
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II APLICACIONES

Por ejemplo, el modo siguiente permite recorrer una estructura de datos de 8 bytes de tamaño con base en
Rbase, usando Rindice para controlar el elemento a acceder: Rbase + Rindice * 8

3.5.12 MODO DE DESPLAZAMIENTO RELATIVO

Este modo es una variante del modo base-desplazamiento. La principal diferencia radica en que el valor
calculado no es la dirección de un operando sino el resultado de la operación. El modo relativo normalmente
tiene por registro base al PC, permitiendo implementar los saltos, es decir, las instrucciones de control de
flujo de programa, al modificar el secuenciamiento automático de la máquina. El registro base es implícito
cuando se trata del PC. Algunas arquitecturas permiten tener desplazamientos relativos muy complejos,
permitiendo además de una constante, un registro sumados al valor del PC.

MD desplazamiento Modo de direccionamiento


Relativo ( al PC )

MEMORIA
(Area de programa)

+ próxima instrucción
realmente
desplazamiento
(negativo )
instrucción actual
próxima instrucción
PC originalmente

PC = [PC] + desplazamiento

Ventajas: Permite implementar ciclos fácilmente.


Nota: Hay que tomar en cuenta el posible uso de números negativos cuando son saltos
hacia atrás.
Por lo general, éstos se implementan en complemento a 2.

3.6 CODIFICACIÓN DEL MD


La codificación del MD es similar a la del CO. Se prefiere emplear la técnica de bloque fijo por
cuanto es más fácil de decodificar y los modos de direccionamiento suelen ser muy pocos.

Es importante anotar aquí el uso del bit de indirecto en la arquitectura PDP, que sirve de base a
nuestro curso. Este bit se emplea para diferenciar los modos directos de su correspondiente indirecto sólo en
un bit (el LSB del campo de MD) Si este bit es 1 el modo en cuestión es indirecto. Por ejemplo, supongamos
que se define la combinación 000 para el modo Directo de Registro, entonces la combinación 001 deberá
corresponder al modo Indirecto de Registros. Esta técnica simplifica mucho la implementación de la Unidad
de Control.

Veamos ahora un ejemplo de Codificación basado en PDP-11. Supongamos que hipotéticamente la


instrucción ADD tiene el CO 0010. Entonces la instrucción:

Docente: Ing. José Díaz Chow Página 17


UNIVERSIDAD NACIONAL DE INGENIERÍA DEPARTAMENTO
FACULTAD DE ELECTROTECNIA Y COMPUTACIÓN DE
ARQUITECTURA
Y SISTEMAS
ARQUITECTURA DE MÁQUINAS COMPUTADORAS II

ADD (R0), R1

Donde el primer operando se obtiene indirectamente del registro R0 y el segundo, que es a la vez destino, se
obtiene directamente de R1. Si el código de MD directo de registro es 000, entonces el formato de la
instrucción se vería así:

CO MD1 V1 MD2 V2

Formato de la instrucción

CO MD1 V1 MD2 V2

0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1

CO de ADD Indirecto en 0 =
modo directo

Bit de indirecto en 1 -
Modo de 000 = 0 001 = 1
> Modo indirecto
Registro -> R0 -> R1

Contenido de la Instrucción

Finalmente, para concluir nuestra discusión acerca del formato de la Instrucción. Anotaremos que los
modos de direccionamiento dependen de la estructura y organización del procesador. Recordemos que
existen tres diferentes: Máquina de registros, de Pila y de Acumulador. Las primeras enfatizan en el uso de
instrucciones de 2 y 3 direcciones. Las segundas poseen básicamente sólo instrucciones de 0 direcciones (o
de 1 en caso de transferencia) y la de acumulador básicamente solo de 1.

Página 18 Docente: Ing. José Díaz Chow

También podría gustarte