Download Unidad III

Document related concepts
no text concepts found
Transcript
UNIVERSIDAD NACIONAL DE INGENIERIA
RECINTO UNIVERSITARIO SIMON BOLIVAR
Facultad de Electrotecnia y Computación
Departamento de Arquitectura y Sistemas
Folleto de
Arquitectura de Máquinas Computadoras II
Curso 2007
2007
Preparado por:
Harriete Martínez Cano
José Díaz Chow
UNIDAD II
III
Managua, Septiembre 2007
INDICE DE CONTENIDO
3
DISEÑO DEL CONJUNTO DE INSTRUCCIONES
3.1
INSTRUCCIÓN Y CONJUNTO DE INSTRUCCIONES
1
1
3.1.1
CONJUNTO DE INSTRUCCIONES
1
3.1.2
INSTRUCCIÓN
1
3.1.3
CLASIFICACIÓN DE LAS INSTRUCCIONES
2
3.1.4
FILOSOFÍAS DE DISEÑO DEL CONJUNTO DE INSTRUCCIONES
3
3.2
FORMATO DE INSTRUCCIONES
4
3.3
CODIGO DE OPERACIÓN
4
3.3.1
CODIFICACIÓN DE BLOQUE FIJO
4
3.3.2
CODIFICACIÓN DE BLOQUE EXPANDIDO
5
3.3.3
CODIFICACIÓN HUFFMAN
6
3.4
CAMPOS DE DIRECCIONAMIENTO
9
3.5
MODOS DE DIRECCIONAMIENTO
10
3.5.1
MODO INMEDIATO
10
3.5.2
MODO DIRECTO, DE REGISTRO O DIRECTO DE REGISTRO
11
3.5.3
MODO ABSOLUTO O DIRECTO DE MEMORIA
11
3.5.4
MODO INDIRECTO DE REGISTRO
12
3.5.5
MODO INDIRECTO DE MEMORIA
12
3.5.6
MODO DE AUTOINCREMENTO
13
3.5.7
MODO DE AUTODECREMENTO
13
3.5.8
MODOS DESPLAZADOS
14
3.5.9
MODO DE INDICE O INDIZADO
14
3.5.10
MODO DE BASE - DESPLAZAMIENTO
15
3.5.11
MODO DE DESPLAZAMIENTO RELATIVO
15
3.6
CODIFICACIÓN DEL MD
16
A R Q U I T E C T U R A
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I ,
C U R S O
2 0 0 7 .
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 refleja los objetivos del proyecto: “necesitamos construir una máquina que sea capaz de ejecutar estas
instrucciones... ”. Bien podría decirse que el repertorio de instrucciones es la “identidad” de la computadora, pues cada
procesador diferente tiene un conjunto de instrucciones diferente.
3.1.1 Conjunto de Instrucciones
Podemos decir que las instrucciones son comandos que indican al CPU qué operación ejecutar en cada momento. 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 de
procesador.
Ortogonalidad
Debe permitir que todas las operaciones se realicen con todos los tipos de datos
que aplican para la misma.
Eficiencia
Las instrucciones elegidas deben poder permitir todas las operaciones sin
redundancias. El ser excesivo y repetitivo degrada la eficiencia.
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 (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.
José Díaz Chow / Harriete Martínez Cano
© MMVI
Página 1
A R Q U I T E C T U R A
3.1.3
D E
M Á Q U I N A S
C O M P U T A D O R A S
I ,
C U R S O
2 0 0 7 .
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
Propósito General
Propósito
Específico
Privilegiadas
Categoría
Ejemplos
Mover datos entre operandos
( puede ser R-R, R-M).
* Cambios en los tamaños y extensión de
Signo
MOVE, LOAD,
STORE
Aritméticas
Operaciones aritméticas.
ADD, SUB, DIV,
MULT, INC, DEC
Lógicas y manejo de
bits (bitwise)
Operaciones lógicas, de comparación y
corrimiento de bits.
AND, OR
RSHIFT, NOT
De Comparación
Operaciones que comparan los valores
de los operandos. Sirven de base para
las de saltos
CMP
Control de flujo de
Programa
Permite modificar la secuencia del
programa para implementar sentencias
de selección, ciclos y llamadas a
subrutinas.
JP, JR, BRN, CALL,
RET
E/S
Permite el acceso a direcciones del
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)
IN, OUT
Tratamiento de
Cadenas (Strings)
Manipulación de cadenas
COMSTR, CATSTR
Polinomios y
funciones científicas,
Vectores y Matrices
Para aplicaciones científicas. La
instrucción implementada en Hardware
acelera la ejecución. También se
consideran datos especiales como
Vectores, Listas y Matrices
Solicitud de atención de los dispositivos
de E/S y Tratamiento de condiciones
anormales del procesador
EVALUATEPOL,
VADD
Interrupciones y
Excepciones
De control del
Sistema
Página 2
Uso
Transferencia
Protección de Memoria, Detención del
programa, reinicio o detención del
ordenador, etc.
INT, Trap
HALT, NOP
José Díaz Chow /Harriette Martínez Cano
© MMVI
A R Q U I T E C T U R A
3.1.4
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I ,
C U R S O
2 0 0 7 .
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 permiten
decodificador rápido y control cableado.
Muchos formatos muy complejos que normalmente
requieren unidad de control microprogramada.
Las operaciones de cálculo son registro-registro.
Instrucciones específicas de carga y almacenamiento.
Las operaciones permiten operandos en memoria.
Usan la mínima cantidad de modos de
direccionamiento.
Buscan permitir la máxima cantidad de modos 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)
José Díaz Chow / Harriete Martínez Cano
© MMVI
Página 3
A R Q U I T E C T U R A
D E
M Á Q U I N A S
C O M P U T A D O R A S
I ,
C U R S O
2 0 0 7 .
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 el mismo código para el tipo, los operandos aparte
FAMILIA ix86, cada CO difiere de acuerdo a la cantidad de operandos
El formato debe contener toda la información de la instrucción o la forma de obtenerla:
-
Operación a realizar
Fuente(s): Dependen del tipo de operación (unaria, binaria. La transferencia se supone unaria)
Destino: Dónde poner el resultado. A veces implícito ( ADD A, B ; B A + B )
Secuenciamiento: Necesidad de conocer cuál será la próxima instrucción. Por lo general está implícito (máquina
secuencial) pero a veces se permite cambiar el flujo de programa afectando al PC con instrucciones específicas o
direccionamiento explícito.
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
MD
OP2
RES
VALOR(ES)
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
Página 4
José Díaz Chow /Harriette Martínez Cano
© MMVI
A R Q U I T E C T U R A
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I ,
C U R S O
2 0 0 7 .
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) = ?
L (CO) = log2(15) = 4 bits
L (F) = L (CO) + 2 * L (Op) = 4 + 2 * 6 = 16 bits
n = 15
*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?
L (CO) = log2(45) = 6 bits
n = 15 + 30 = 45
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 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
0000
…
1110
1111
OP1
xxxxxx
…
xxxxxx
OP2
xxxxxx
…
xxxxxx
1111
…
1111
000000
…
111110
xxxxxx
…
xxxxxx
José Díaz Chow / Harriete Martínez Cano
© MMVI
15 inst. de 2 operandos
30 inst. de 1 operando
Página 5
A R Q U I T E C T U R A
D E
M Á Q U I N A S
C O M P U T A D O R A S
I ,
C U R S O
2 0 0 7 .
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
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 fig 2.6
Nemónicos de
Instrucciones
Contador de Frecuencia Relativo
LOAD
1/4
STO
1/4
ADD
1/8
AND
1/8
NOT
1/16
RSHIFT
1/16
JUMP
1/16
HALT
1/16
Figura 2.6 Conjunto de Instrucciones con contador de frecuencia relativo.
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 2.7)
LOAD STO
¼
¼
ADD
1/8
AND
1/8
NOT
1/16
RSHIFT JUMP
1/16
1/16
HALT
1/16
Figura 2.7 Arreglo inicial de los mnemónicos de las instrucciones.
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).
Página 6
José Díaz Chow /Harriette Martínez Cano
© MMVI
A R Q U I T E C T U R A
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I ,
C U R S O
2 0 0 7 .
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.
LOAD
STO
ADD
AND
NOT
RSH
JUMP
1/4
1/4
1/8
1/8
1/16
1/16
1/16
a)
HALT
1/16
1/8
LOAD
STO
ADD
AND
NOT
RSH
JUMP
1/4
1/4
1/8
1/8
1/16
1/16
1/16
1/8
b)
STO
ADD
AND
NOT
RSH
JUMP
1/4
1/4
1/8
1/8
1/16
1/16
1/16
1
0
1
0
1
1/4
1/16
1/8
LOAD
1/2
HALT
HALT
1/16
1
0
1/8
0
1/8
1
0
1/4
1
0
1/2
0
1
c)
1/2
Figura 2.8 Proceso as asociación de nodos en codificación Huffman
MNemónico
LOAD
STO
ADD
NOT
RSHIFT
JUMP
HALT
CO
11
10
011
010
0010
0001
0000
Camino desde la Raíz.
izquierda-izquierda
izquierda-derecha
der-izq-izq
der—izq—der
der—der—izq—der
der—der—der—izq
der—der—der—der
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:
José Díaz Chow / Harriete Martínez Cano
© MMVI
Página 7
A R Q U I T E C T U R A
D E
M Á Q U I N A S
C O M P U T A D O R A S
I ,
C U R S O
2 0 0 7 .
L (CO)med = LA = Σ(i = 1, n) lifi
donde l es la longitud del CO y f es la frecuencia relativa de la instrucción i.
Para nuestro ejemplo, entonces:
L (CO)med = 2(1/4 +1/4) + 3(1/8 +1/8) + 4(1/16 + 1/16 + 1/16 + 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 +1/4) + 3(1/8 + 1/8) +3(1/16 + 1/16 + 1/16 + 1/16)
= 3/2 + ¾ + ¾
= 3 bits.
El número óptimo de bits para la codificación de un conjunto de mensaje es:
L (CO)opt = LO = - Σ(i = 1, n) fi log2( fi )
La diferencia entre la longitud promedio actual y la longitud optima 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
LO = [2(1/4) log2(1/4) + 2(1/8)log2(1/8) + 4(1/16)log2(1/16)]
LO = 2.75 bits.
Página 8
José Díaz Chow /Harriette Martínez Cano
© MMVI
A R Q U I T E C T U R A
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I ,
C U R S O
2 0 0 7 .
Calculando el desperdicio se nota que en el esquema de Huffman la redundancia es igual a cero, sin embargo
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 cuando los códigos de operación son codificados, el proceso de decodificación toma más tiempo, ya
que debe hacerse una búsqueda en el árbol de huffman. En cambio en el esquema de bloque el proceso de
decodificación es más fácil, pero hay un porcentaje de redundancia.
Aunque la codificación de código de bloque toma espacio de memoria extra es ampliamente usado por su
sencillo procedimiento de decodificación.
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, que se usa para modificar el PC.
Un campo de dirección se estructura de la forma:
MD
V
Figura 2.9 Estructura del Campo de Dirección
•
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 u otro número. En los últimos casos, este valor puede ser bastante grande, tanto que no cabría en el formato de instrucciones, 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
CO
MD1
V1
Palabra complementaria de V
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:
José Díaz Chow / Harriete Martínez Cano
© MMVI
Página 9
A R Q U I T E C T U R A
D E
MD
M Á Q U I N A S
C O M P U T A D O R A S
I ,
C U R S O
2 0 0 7 .
V
CALCULO DE LA
DIRECCION
EFECTIVA
DIRECCION EFECTIVA
DEL OPERANDO
ESTADO DEL
PROCESADOR
Figura 2.11 Cálculo de la dirección efectiva de los operandos.
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 ser residir en memoria o en un registro del procesador, pero los operandos
fuentes además pueden explicitarse directamente en la instrucción.
Para los operandos en registros, la dirección efectiva del operando es el índice 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 la dirección efectiva.
MD
Página 10
V = # ( operando )
Ventajas:
Desventajas:
Uso:
Forma sencilla de obtención del operando.
Sólo permite operandos fuente y valores constantes.
Inicialización de variables y declaración de constantes.
Ejemplo:
MOVE R10, 9
; R10 ← 9
José Díaz Chow /Harriette Martínez Cano
© MMVI
A R Q U I T E C T U R A
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I ,
C U R S O
2 0 0 7 .
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.
MD
Modo de direccionamiento
Directo o Directo de Registro
r
BANCO DE
REGISTROS DEL
PROCESADOR
OPERANDO
Ventajas:
Rr
Uso:
Rapidez de acceso. El operando ya está dentro del procesador.
Pocos bits para codificar los registros.
Si se necesita estar intercambiando el valor constantemente con una variable
en Memoria
Almacenar datos que se utilizan con mucha frecuencia.
Ejemplo:
MOVE R10, R1
Desventajas:
: 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
OPERANDO
Ventajas:
Uso:
Permite acceder a cualquier dirección de memoria.
No se requiere de cálculo adicional.
Requiere muchos bits para direccionamiento.
Requiere soporte en uso de estructuras de datos y programas portables.
Saltos absolutos, Rutinas fijas (sistema), paso de parámetros, puertos de E/S.
Ejemplo:
MOV R10, (1800)
Desventajas:
José Díaz Chow / Harriete Martínez Cano
© MMVI
; R10 ← [1800]
Página 11
A R Q U I T E C T U R A
D E
M Á Q U I N A S
C O M P U T A D O R A S
I ,
C U R S O
2 0 0 7 .
3.5.4 MODO INDIRECTO DE REGISTRO
El registro r contiene la dirección efectiva del operando.
MD
Modo de direccionamiento
Indirecto de Registro
r
BANCO DE
REGISTROS DEL
PROCESADOR
MEMORIA
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:
Uso:
Permite acceder a cualquier dirección de memoria usando pocos bits.
Flexibiliza el uso punteros, vectores y estructuras.
Requiere que se cargue la dirección al registro.
Limita el uso de registros para operandos.
Datos estructurados y paso de parámetros a subrutinas.
Ejemplo:
MOV R10, (R1)
Desventajas:
; 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:
Página 12
MOV R10, ((1800))
; R10 M( M(1800))
José Díaz Chow /Harriette Martínez Cano
© MMVI
A R Q U I T E C T U R A
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I ,
C U R S O
2 0 0 7 .
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
REGISTROS DEL
PROCESADOR
MEMORIA
Dirección Efectiva
OPERANDO
Rr
Celda A
Celda A + k
Operando = M([ Rr ])
= [ Rr ] + k
Rr
Por lo general k es el valor de la palabra o el tamaño de los operandos.
Ventajas:
Desventajas:
Acceso eficiente a elementos consecutivos en arreglos.
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
REGISTROS DEL
PROCESADOR
OPERANDO
Rr
A
Rr
1
MEMORIA
Celda A - k
Celda A
= [ Rr ] - k
EA: Effective Address, Dirección Efectiva.
José Díaz Chow / Harriete Martínez Cano
© MMVI
Página 13
A R Q U I T E C T U R A
Operando
Ejemplo:
D E
M Á Q U I N A S
C O M P U T A D O R A S
I ,
C U R S O
2 0 0 7 .
= M( [ Rr ] )
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
BANCO DE
REGISTROS DEL
PROCESADOR
Rr
Indice
Modo de direccionamiento de
Indice
MEMORIA
+
OPERANDO
Operando = M( [ Rr ] + base )
Para que este modo sea eficiente se requiere tener facilidad de manipulación del registro de índice: Incrementar y
decrementar el registro, así como multiplicar el índice por una constante arbitraria k.
Página 14
Ventajas:
Desventajas:
Acceso eficiente a arreglos y estructuras en la memoria.
Precisa cargar y actualizar el índice.
El cálculo de la EA es más tardado pues se requiere de Σ .
Ejemplo:
MOV R0, 1800(R1)
MOV R0, R5(R1)
; R0 ← M(1800 + [R1])
; R0 ← M([R5] + [R1])
José Díaz Chow /Harriette Martínez Cano
© MMVI
A R Q U I T E C T U R A
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I ,
C U R S O
2 0 0 7 .
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
tiene se usa cuando tenemos desplazamientos constantes.
MD
r
Modo de direccionamiento
Base + Desplazamiento
desplazamiento
BANCO DE
REGISTROS DEL
PROCESADOR
Dirección Base
MEMORIA
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.
Precisa cargar y actualizar la base.
El cálculo de la EA es más tardado pues se requiere de Σ .
Desventajas:
Ejemplo:
MOV R0, R1(10)
; R0 ← M([R1] +10)
3.5.11 MODO DE BASE + 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 oslo con suma sino además por multiplicación. 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 anterior. 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
originalmente
PC
José Díaz Chow / Harriete Martínez Cano
© MMVI
Página 15
A R Q U I T E C T U R A
D E
M Á Q U I N A S
C O M P U T A D O R A S
I ,
C U R S O
2 0 0 7 .
PC = [PC ] + desplazamiento
Ventajas:
Nota:
Permite implementar ciclos fácilmente.
Se debe saber el formato del número negativo. Por lo general se implementa
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, una técnica que se emplea mucho. Consiste en diferenciar los
modos directos de su correspondiente indirecto sólo en un bit (el LSB) 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 los decodificadores de la Unidad de
Control.
Veamos ahora un ejemplo de Codificación. Supongamos que hipotéticamente la instrucción:
ADD (R0), R1
tiene el CO 0010. 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, el formato de la instrucción se vería así:
CO
MD1
V1
MD2
V2
Formato de la instrucción
CO
MD 1
V1
MD 2
V2
0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1
Indirecto en 0 =
modo directo
CO de ADD
Modo de
Registro
Bit de indirecto en 1 > Modo indirecto
000 = 0
-> R0
001 = 1
-> 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 1 y 0 direcciones y la de acumulador máximamente de 1.
Página 16
José Díaz Chow /Harriette Martínez Cano
© MMVI