Download GUIA 24: REPERTORIO DE INSTRUCCIONES

Document related concepts
no text concepts found
Transcript
ARQUITECTURA DEL COMPUTADOR
UNIMET
Prof. Sandro Costantini
REPERTORIO DE INSTRUCCIONES
GUIA 24: REPERTORIO DE INSTRUCCIONES
INSTRUCCIONES
Las instrucciones maquinas son las acciones elementales que puede ejecutar un computador. Una
acción compleja deberá codificarse como una secuencia de instrucciones máquina en lo que se
denomina un programa. La arquitectura de un procesador entendida como el conjunto de recursos
operativos disponibles por un programador a nivel de lenguaje maquina queda definida por el repertorio
de instrucciones ISA (Instruction Set Architecture). En general, una instrucción básica que el computador
realiza sobre unos datos ubicados en la memoria o en los registros de la maquina y a los que accede
utilizando un modo de direccionamiento.
Un repertorio de instrucciones no sólo define las operaciones que el computador puede realizar (sumas,
restas, etc.) sino que también incluye descripciones del modelo de programación, es decir registros
accesibles por el programador, modos de direccionamiento, tipos de operados, tamaño de los buses etc.
Desde el punto de vista del diseñador el repertorio de instrucciones da las especificaciones funcionales
de la Unidad Central de Proceso (CPU). El objetivo de los diseñadores de computadores es encontrar un
repertorio que haga fácil la construcción del hardware y del compilador al tiempo que se maximiza el
rendimiento y se minimiza el coste.
Por consiguiente, la arquitectura ISA de un procesador viene determinada por los siguientes factores.
•
•
•
•
Tipo de instrucciones a realizar
Tipos de representación de los datos
Modos de direccionamiento que son mecanismos utilizados para especificar un operando o la
ubicación de un operando.
Formatos de las Instrucciones que indican como se codifica y distribuye la información en la
instrucción
TIPOS DE INSTRUCCIONES
La selección del juego de instrucciones de un computador es uno de los puntos críticos de diseño. Las
Instrucciones más frecuentes son:
• Movimiento de datos
• Modificación de secuencia
• Aritméticas
• Comparación
• Lógicas
• Desplazamiento
• De entrada/salida
FORMATO DE LAS INSTRUCCIONES
El formato de una instrucción máquina define la disposición y el reparto de sus bits entre los
componentes de la instrucción. El formato de una instrucción debe incluir el código e, implícita o
explícitamente, cero o mas operandos. Los operandos son datos que están en alguno de los registros
internos de la CPU, en la memoria principal o en algún controlador de entrada/salida. A cada operando se
accede mediante uno de los distintos modos de direccionamiento que veremos posteriormente.
A la hora de diseñar un juego de instrucciones, se deben tener en cuenta ciertas consideraciones sobre
dos cuestiones básicas: la longitud de la instrucción y el reparto de los bits que la componen.
Un formato debe contener la siguiente información:
• Operación que realiza la instrucción
• Dirección de los operados
• Dirección resultado
GUIA 24
© 2007 Sandro Costantini
1
ARQUITECTURA DEL COMPUTADOR
UNIMET
Prof. Sandro Costantini
REPERTORIO DE INSTRUCCIONES
•
•
Dirección siguiente instrucción
Modo de representación de operados
LONGITUD DE LAS INSTRUCCIONES
Hay un claro compromiso entre el deseo de un rico y variado repertorio de instrucciones, y la necesidad
de ahorrar espacio. Los programadores quieren muchos códigos de operación distintos (requieren
muchos bits en el campo de código de operación) para disponer de operaciones que se ajusten lo más
posible a sus necesidades, y así escribir programas más cortos. De igual manera, cuanto más modos de
direccionamiento estén disponibles, más flexibilidad tendrán para manejar estructuras de datos
complejas, como tablas o matrices. Por otro lado, puesto que cada vez se dispone de mayor cantidad de
memoria, se requieren muchos bits para hacer referencia a un gran espacio de direccionamiento. Pero
claro, una instrucción que ofrezca todo esto puede ocupar posiblemente el doble de bits que otra similar
que no ofrezca tanta flexibilidad. Está claro que una instrucción larga ocupa más espacio en memoria
que una corta, se tarda más tiempo en llevarla de memoria a la CPU, y se tarda más tiempo en
decodificarla.
Se debe tener en cuenta que el ancho del bus de datos sea múltiplo de la longitud de un carácter, para
evitar desaprovechar el espacio de almacenamiento. Y esta restricción afecta a la longitud de las
instrucciones, que deben ocupar un número entero de palabras, o en una palabra debe caber un número
entero de instrucciones. Por esto los tamaños de las instrucciones suelen ser múltiplos de 8. Un diseño
con caracteres de 9 bits, instrucciones de 12 y palabras de 31 bits sería una catástrofe.
REPARTO DE LOS BITS
Aquí el compromiso está en el reparto de los bits disponibles entre el número de códigos de operación y
la versatilidad de los operandos. Esta versatilidad genera las siguientes preguntas: ¿cuántos operandos
hay en una instrucción? ¿de cuantos modos de direccionamiento se dispone? ¿dónde están los
operandos, en registro o en memoria? ¿Cuántos registros hay?
Las informaciones relativas a los factores mencionados anteriormente se codifican en cada una de las
instrucciones siguiendo un formato preestablecido. El formato determinará la longitud en bits de las
instrucciones y los campos que codifican el valor de los factores citados.
Los campos típicos de una instrucción son:
•
•
Código de operación
Campo de dirección
El Código de operación indica la operación a realizar por la instrucción. Es un campo con tamaño fijo o
variable. Por ejemplo si el campo tiene 8 bits esto indica que el repertorio tendrá 28 operaciones
diferentes. El código de operación puede contener más información que la de la operación a ejecutar. Por
ejemplo, los modos de direccionamiento pueden ir incluidos en este código, o tener un campo
independiente.
Como no todas las instrucciones se utilizan con la misma frecuencia, en ocasiones se tienen códigos con
menos bits para las instrucciones más utilizadas, de esta manera se optimiza espacio.
El campo de dirección especifica la dirección de un dato, resultado o instrucción a la que se bifurca.
Lógicamente existirán tanto campos dirección como operados tenga la instrucción. Igual que ocurría con
el código de operación puede incluir implícitamente los modos de direccionamiento utilizados (si el modo
de dirección se incluye en el código de operación no se incluye aquí y viceversa)
En algunas ocasiones se utilizan extensiones de código. Como la longitud de la instrucción es fija, si el
tamaño del campo de código de operación se extiende, tendremos instrucciones con menor numero de
operados.
Con esto en un computador podemos tener varios formatos de instrucción.
GUIA 24
© 2007 Sandro Costantini
2
ARQUITECTURA DEL COMPUTADOR
UNIMET
Prof. Sandro Costantini
REPERTORIO DE INSTRUCCIONES
En general una instrucción se compone de los siguientes campos del programa.
•
•
•
•
Código de operación (CO)
Operandos fuentes (OP1,OP2,...)
Operando destino (Opd)
Instrucción siguiente (IS)
CO
OP1
OP2
.......
OPd
IS
El código de operación determina la operación que se realiza sobre los operandos 1,2,... El resultado se
deja en el Operando Destino. Lo normal es que el numero de operandos fuentes de un repertorio no pase
de 2. La dirección de la instrucción siguiente IS queda implícita en todas las instrucciones (se trata de la
instrucción siguiente del programa) salvo en las instrucciones de ruptura condicional o incondicional de
secuencia.
INSTRUCCIONES CON 3 OPERANDOS:
CO OP1(fuente1) OP2(fuente2) OP3(destino)
Constan de un campo de código de operación
y 3 operandos que corresponden a las
direcciones de las dos entradas y la salida de
la operación.
REG B
REG A
Presenta la máxima flexibilidad pero ocupa
muchos bits si los operandos están en
memoria.
ULA
REGISTRO DE INSTRUCCION
Ejemplo ADD B, C, A : A ← B+C
ACUMULADOR
(A, B, C son direcciones de memoria)
INSTRUCCIONES CON 2 OPERANDOS:
CO OP1(fuente1) OP2(fuente2)
Como la de 3 operandos, solo que en una de
las direcciones se almacena también el
resultado. Con esto se reduce el tamaño de la
instrucción pero se pierde uno de los
operandos.
Ejemplo: ADD B, C : B ← B+C
REG B
REG A
ULA
REGISTRO DE INSTRUCCION
ACUMULADOR
GUIA 24
© 2007 Sandro Costantini
3
ARQUITECTURA DEL COMPUTADOR
UNIMET
Prof. Sandro Costantini
REPERTORIO DE INSTRUCCIONES
INSTRUCCIONES CON 1 OPERANDO:
CO OP1(fuente1)
Supone que fuente1 y destino es un registro
predeterminado (acumulador). Se pierde un
operando fuente.
Ejemplo: ADD B :
REG B
REG A
ULA
Acumulador ← [Acumulador] + B
REGISTRO DE INSTRUCCION
ACUMULADOR
INSTRUCCIONES CON 0 OPERANDOS:
CO
Se trata de computadores que trabajan sobre una pila
Ejemplo: ADD : Tope de pila ← [ Tope de pila] + [Tope de pila -1]
MODOS DE DIRECCIONAMIENTO
Son procedimientos que permiten determinar un operando o la ubicación de un operando o una
instrucción. Generalmente lo que se especifica es la dirección del operando. Se define dirección efectiva
como la dirección en la que se encuentra el objeto, siendo un objeto cualquier elemento direccionable es
decir, una instrucción, un operando o un resultado. Los objetos pueden residir en la propia instrucción, en
un registro o en la memoria principal.
Los modos de direccionamiento existen por diversos motivos. Porque ahorran espacio de memoria. Por
ejemplo. Si un bus de direcciones tiene 64 bits, para direccionar un elemento de memoria necesitamos
instrucciones de más de 64 bits, puesto que una instrucción debe incluir mas información aparte de la
dirección del operando . Si implementamos un modo de direccionamiento que solo utilice 32 bits
conseguimos instrucciones más pequeñas. Cuánto más pequeñas sean las instrucciones, menos
memoria se gasta. Los modos de direccionamiento suelen utilizar menos bits que los necesarios para
direccionar directamente la memoria.
Además, su uso simplifica el manejo de las estructuras de datos complejas, dan flexibilidad a los
programadores de lenguaje máquina y facilitan el diseño de compiladores. De las diferentes
clasificaciones que existen nosotros vamos a usar la siguiente:
•
•
•
•
GUIA 24
Inmediato
Directo
Indirecto
Indexado
© 2007 Sandro Costantini
4
UNIMET
ARQUITECTURA DEL COMPUTADOR
Prof. Sandro Costantini
REPERTORIO DE INSTRUCCIONES
DIRECCIONAMIENTO INMEDIATO
La forma más simple de indicar un operando es incluyéndolo en la propia instrucción. Ya
CO OPERANDO
que las instrucciones no son modificables, este es el modo que se utiliza en operaciones
con constantes. Si la constante es un valor numérico, se almacena en complemento a
dos.
La ventaja del direccionamiento inmediato es que no se requieren referencias adicionales a memoria para obtener el
operando, ahorrando por lo tanto espacio y tiempo. El inconveniente es que el espacio reservado para este operando
suele estar restringido y suele ser menor que el tamaño de la palabra, por lo que en algunos procesadores solamente
se utiliza para constantes de valores pequeños.
DIRECCIONAMIENTO DIRECTO
Otra forma muy simple de hacer referencia a un
operando es indicando su dirección en memoria
principal, y solamente requiere una referencia
adicional a memoria para obtener un operando.
Es el modo de direccionamiento común para las
variables globales de los programas. La
instrucción siempre accesará a la misma
localidad de memoria exactamente. Si bien el
valor contenido en ella puede cambiar, la
dirección no puede alterarse.
MEMORIA
CO
A
A
operando
operando
DIRECCIONAMIENTO A REGISTRO
Similar al direccionamiento directo, pero en este caso, el campo de dirección se refiere a uno de los registros
generales del procesador en lugar de una
posición de memoria.
Las ventajas que tiene son que solo necesita 3 0
4 bits para indicar uno de los registros
REGISTROS
generales, y que no requiere referencias
R
CO
adicionales a memoria. El inconveniente es que
no se suele disponer de muchos registros,
aunque con el advenimiento de las maquinas
RISC, la tendencia es a ir incrementando su
operando
R
número.
operando
Se utiliza para guardar valores temporales en la
evaluación de expresiones, o para mantener en
registros algunas variables que se referencian
muy a menudo.
DIRECCIONAMIENTO INDIRECTO
En este modo se hace referencia a una palabra
de memoria principal en la que se encuentra la
dirección del operando.
Con una “indirección” se requieren dos accesos
adicionales a memoria para obtener el
operando.
Se utiliza cuando la dirección de las variables
no se conoce en el tiempo de compilación, sino
que es durante la ejecución del programa
cuando se calcula la dirección del operando y
se guarda ésta en memoria (o en un registro
como se ve en el siguiente modo).
GUIA 24
MEMORIA
CO
© 2007 Sandro Costantini
A
A
operando
5
UNIMET
ARQUITECTURA DEL COMPUTADOR
Prof. Sandro Costantini
REPERTORIO DE INSTRUCCIONES
DIRECCIONAMIENTO INDIRECTO POR REGISTRO
En este método, el operando hace referencia a
un registro general en el que se encuentra la
dirección del dato. Cuando una dirección se usa
de esta manera, se llama apuntador. Una gran
ventaja del direccionamiento indirecto por
registro es que puede hacer referencias a la
memoria sin pagar el precio de tener una
dirección de memoria completa en la
instrucción.
MEMORIA
CO
R
operando
operando
REGISTROS
R
operando
DIRECCIONAMIENTO INDEXADO
En este modo para formar la dirección del dato
se utilizan un registro más un desplazamiento
que viene explícitamente en el campo de
operando.
Dirección del operando es igual al contenido del
registro + una constante.
MEMORIA
CO
R
5
+
operando
operando
REGISTROS
R
GUIA 24
operando
© 2007 Sandro Costantini
6
ARQUITECTURA DEL COMPUTADOR
UNIMET
Prof. Sandro Costantini
REPERTORIO DE INSTRUCCIONES
EJEMPLO DE DISEÑO DE FORMATO DE INSTRUCCION.
Diseñar el formato de las instrucciones de un computador con 8 registros de propósito general que
permita codificar en una instrucción de 32 bits lo siguiente:
•
12 instrucciones de 3 operados
2 operados que permitan direccionamiento directo e indirecto de memoria
1 operando que permita direccionamiento a registro e indirecto por registro
•
150 instrucciones de 2 operados
1 operando que permita direccionamiento directo e indirecto de memoria
1 operando que permita direccionamiento a registro e indirecto por registro
•
30 instrucciones de 0 operados
NOTA: El campo dirección de los operados con direccionamiento directo e indirecto de memoria será de
11 bits.
Solución:
Los operados que permiten direccionamiento directo e indirecto de memoria requieren:
• 1 bit para especificar el modo de direccionamiento ( m=0 directo, m=1 indirecto)
• 11 bits para especificar la dirección
Los operados que permiten direccionamiento de registro e indirecto por registro requieren:
• 1 bit para especificar el modo de direccionamiento ( m=0 a registro, m=1 indirecto por registro)
• 3 bits para especificar el numero de registro (ya que tenemos 8 registros)
Para las 12 instrucciones de tres operados necesitamos:
• 4 bits para especificar el tipo de operaciones de la 0( 0000) al 11 (1011)
• 12 bits para especificar el primer y segundo operando respectivamente
• 4 bits para especificar el tercer operando
Para las 150 instrucciones de dos operados necesitamos:
• 8 bits para especificar el tipo de operando del 0 ( 00000000) al 149 (1010101)
• 12 bits para especificar el primer operando
• 4 bits para especificar el tercer operando
Para las 30 instrucciones sin operados necesitamos:
• 5 bits para especificar el tipo de operación: del 0(00000) al 29 (11101)
Instrucción de 3 operandos
4
1
11
1
11
tipo
m1
dir1
m2
dir2
CODIGO
OPERACION
OPERANDO 1
Instrucción sin operandos
1
3
m3 reg
OPERANDO 2
4
8
5
1111
11111111
tipo
CODIGO OPERACION
15
NO USADO
Nomenclatura
Instrucción de 2 operandos
4
8
1111
tipo
4
CODIGO OPERACION NO USADO
GUIA 24
1
11
m1
dir1
1
3
m2 reg
mk: modo de direccionamiento del operando k
dirk: dirección del operando k
reg: número de registro
tipo: tipo de instrucción a ejecutar
OPERANDO 1
© 2007 Sandro Costantini
7
ARQUITECTURA DEL COMPUTADOR
UNIMET
Prof. Sandro Costantini
REPERTORIO DE INSTRUCCIONES
EJEMPLO DE EXPANSION DEL CODIGO DE OPERACION
Supongamos a instrucción de 16 bits con código de operación de 4 bits y 3 operados de 4 bits cada uno
como se muestra en la figura:
15 14 13 12 11 10 9
CO
DIR1
8 7 6
5 4 3
DIR2
2 1 0
DIR3
Un código de operación de 4 bits solo provee 16 instrucciones, así que probablemente sea muy limitante.
Consideremos el caso en que uno de los códigos de operación por ejemplo el 1111, se utilice para
designar instrucciones con un código de operación de 8 bits. Así que tendremos solamente 15
instrucciones de 3 campos de dirección, pero podemos disponer un set adicional de instrucciones con
código de operación de 8 bits con 2 campos de dirección. Uno o mas de este código de operación de 8
bits pueden utilizarse para designar instrucciones con un código de operación de 12 bits y un campo de
dirección. Supongamos que utilizamos los códigos de operación 11111110 y 11111111. Finalmente uno o
mas de estos códigos de operación de 12 bits puede utilizarse para designar instrucciones con código de
operación de 16 bits sin campo de dirección. Supongamos que utilizamos el 111111111111.
Resumiendo tendremos un total de 76 instrucciones diferentes de la siguiente forma:
•
15 instrucciones de 3 direcciones: CO bits 12-15; OP1 bits 8-11; OP2 bits 4-7; OP3 bits 0-3
15 14 13 12 11 10 9 8 7
CO
•
DIR1
DIR2
CO
0
Los códigos de operación van
desde el 0000
hasta el 1110
DIR3
6 5 4
DIR1
3 2 1
0
Los códigos de operación van
desde el 1111 0000
hasta el 1111 1101
DIR2
31 instrucciones de 1 direcciones: CO bits 4-15; OP1 bits 0-3
15 14 13 12 11 10 9 8 7
1 1 1 1 1 1 1
6 5 4
CO
•
3 2 1
14 instrucciones de 2 direcciones: CO bits 8-15; OP1 bits 4-7; OP2 bits 0-3
15 14 13 12 11 10 9 8 7
1 1 1 1
•
6 5 4
3 2 1
0
Los códigos de operación van
desde el 1111 1110 0000
hasta el 1111 1111 1110
DIR1
16 instrucciones de 0 direcciones: CO bits 0-15
15 14 13 12 11 10 9 8 7 6 5 4
1 1 1 1 1 1 1 1 1 1 1 1
3 2 1
0
Los códigos de operación van
desde el 1111 1111 1111 0000
hasta el 1111 1111 1111 1111
CO
NOTA: Si se hubiese escogido solo una
combinación del código de 8 bits (por ejemplo 11111111) el resultado sería diferente:
¿Cuántas instrucciones en total resultarían?
GUIA 24
© 2007 Sandro Costantini
8
UNIMET
ARQUITECTURA DEL COMPUTADOR
Prof. Sandro Costantini
REPERTORIO DE INSTRUCCIONES
Resumiendo podemos representar el proceso descrito en la siguiente tabla:
0000
0001
DIR 1
DIR 1
DIR 2
DIR 2
DIR 3
DIR 3
.
.
.
.
.
.
.
.
.
.
.
.
1 1 1 0 DIR 1
1111 0000
1111 0001
DIR 2
DIR 2
DIR 2
DIR 3
DIR 3
DIR 3
.
.
.
.
.
.
.
.
.
1 1 1 1 1 1 0 1 DIR 2
1111 1110 0000
1111 1110 0000
DIR 3
DIR 3
DIR 3
.
.
.
.
.
.
15 instrucciones de
3 operados
(CO de 4 bits)
14 instrucciones de
2 operados
(CO de 8 bits)
31 instrucciones de
1 operados
(CO de 12 bits)
1 1 1 1 1 1 1 1 1 1 1 0 DIR 3
1111 1111 1111 0000
1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 16 instrucciones de
.
0 operados
.
.
(CO de 16 bits)
1111 1111 1111 1111
GUIA 24
© 2007 Sandro Costantini
9