Está en la página 1de 22

Formato de instrucción

Matı́as López

Organización del Computador I


Conceptos claves del dı́a de hoy

I Tamaño de memoria
I Dirección de memoria
I Unidad direccionable
I Instrucción
I Codificación de una instrucción
¿Qué tenı́a esto que ver?

Comparemos esto con la memoria.


I La cantidad de personas que entra en una cuadra es el
tamaño de la memoria
I La cantidad de personas que entra en una casa es el tamaño
de la unidad direccionable
I La cantidad de casas de la cuadra es la cantidad de
direcciones de la memoria
I La cantidad de bits necesarios para numerar las casas es la
cantidad de bits que necesarios para distinguir las direcciones
de memoria
¡Ahora sı́, arranquemos!
¿Cuántos bits son necesarios para poder direccionar la
memoria en los siguientes casos?

1. Memoria de 2 GB con direccionamiento a byte


2. Memoria de 2 GB con direccionamiento a palabra de 16 bits
3. Memoria de 16 GB con direccionamiento a palabra doble
¿Cuántos bits son necesarios para...? (Solución)

Para saber la cantidad de direcciones que tenemos que direccionar en


cada caso, usaremos la siguiente fórmula:
tamaño de la memoria
cantidad de direcciones =
unidad de direccionamiento

30
1. direcciones = 1 2B/dir
GB
= 12×2 B 1
B/dir = 2 × 2
30
dir
1 30
bits por dirección = log2 (2 × 2 ) = 31 bits
2. direcciones = 2 2B/dir
GB
= 230 dir
bits por dirección = log2 (230 ) = 30 bits
3. direcciones = 416B/dir
GB
= 22 × 230 dir
bits por dirección = log2 (22 × 230 ) = 32 bits
Nuestro primer diseño de formato de instrucción

Una computadora tiene instrucciones de 32 bits y 12 bits para


direccionamiento. Suponiendo que tiene 250 instrucciones de 2
operandos,
1. ¿Cuál es el tamaño máximo de la memoria en los siguientes
casos?:
. direccionamiento a byte
. direccionamiento a palabra de 16 bits
. direccionamiento a palabra doble
2. ¿Cuántas instrucciones de un operando puede tener?
Nuestro primer... (solución) I
1. Como las direcciones ocupan doce bits, sabemos que el sistema provee
212 direcciones.
Entonces, si cada dirección contiene un byte, el tamaño máximo es

212 × 1B = 4KB

Por su parte, si cada dirección contiene dos bytes, el tamaño máximo es

212 × 2B = 8KB

Finalmente, si cada dirección contiene cuatro bytes, el tamaño máximo es

212 × 4B = 16KB

2. Para poder determinar cuántas instrucciones de un operando puede


haber, primero veamos cuántas instrucciones de dos operandos hay.

Tipo 1 Instrucciones de dos operandos.


La longitud total de la instrucción son 32 bits. Las
instrucciones de dos operandos deben llevar dos
direcciones. Cada dirección tiene 12 bits. Por lo tanto, me
quedan 32 − 12 − 12 = 8 bits para el código de operación.
Nuestro primer... (solución) II
8 bits (codop) 12 bits (dir1) 12 bits (dir2)
Hay que codificar 250 instrucciones de dos operandos,
para los cuales podemos usar hasta ocho bits:
instrucción 1 → 0000 0000
instrucción 2 → 0000 0001
..
.
instrucción 250 → 1111 1001
Con ocho bits podemos representar 28 = 256
instrucciones distintas. Por lo tanto, quedan
256 − 250 = 6 combinaciones sin utilizar.
Tipo 2 Instrucciones de un operando.
Para las instrucciones de un operando tengo
32 − 12 = 20 bits para el codop.
20 bits (codop) 12 bits (dir)
De esos veinte bits, no están disponibles todas las
combinaciones posibles, ya que algunas son usadas para
el tipo 1. Por lo tanto:
Nuestro primer... (solución) III

I de los primeros ocho bits del código de


operación, sólo puedo usar seis combinaciones
(del 1111 1010 al 1111 1111);
I podemos usar todas las combinaciones de los
restantes doce bits del código de operación
(212 = 4096).
Luego, podemos codificar un máximo de
6 × 4096 = 24576 instrucciones de un operando.
instrucción 1 → 1111 1010 0000 0000 0000
instrucción 2 → 1111 1010 0000 0000 0001
..
.
instrucción 24576 → 1111 1111 1111 1111 1111
Vamos a complicarnos un poquito más...
Ahora con varios modos de direccionamiento...

Considerando una computadora que cuenta con:

• 16 registros de propósito general


• instrucciones de tamaño fijo de 16 bits
• un bus de direcciones de 7 bits

diseñar un formato de instrucción que permita codificar:


I 2 instrucciones con dos operandos a memoria.
I 8 instrucciones con un registro y un operando a memoria.
I 32 instrucciones con dos registros.
I 16 instrucciones sin operandos.
Ahora con varios... (solución) I
Del enunciado sabemos que:

las instrucciones tienen una longitud fija de 16 bits;

el bus de direcciones es de siete bits, por lo tanto, necesitaremos al menos
siete bits para codificar direcciones;

como hay dieciséis registros de propósito general, no podemos usar menos
de (log2 (16) = 4) 4 bits para codificarlos.

Separemos los tipos de instrucción de acuerdo a sus operandos.

Tipo 1 instrucciones de dos operandos en memoria.


En este caso necesitamos dos direcciones de memoria en cada
instrucción; por lo tanto, nos quedan 16 − 7 − 7 = 2 bits para
codificar instrucciones.
2 bits (codop) 7 bits (dir1) 7 bits (dir2)
Codificamos los códigos de operación de la siguiente manera:

instrucción 1 → 00
instrucción 2 → 01
Ahora con varios... (solución) II
En total: dos instrucciones de este tipo.
Tipo 2 instrucciones con un registro y una dirección de memoria.
En este caso, necesitamos direccionar un registro y una
posición de memoria en cada instrucción; luego, quedan
disponibles 16 − 4 − 7 = 5 bits para codificar instrucciones.
5 bits (codop) 4 bits (reg) 7 bits (dir)
Codificamos los códigos de operación como se muestra a
continuación (recordando los prefijos de dos bits ya utilizados)
instrucción 1 → 10 000
..
.
instrucción 8 → 10 111
En total: ocho instrucciones de este tipo.
Tipo 3 instrucciones con dos registros.
Para este tipo de instrucciones necesitamos hacer referencia a
dos registros en cada instrucción; nos quedan 16 − 4 − 4 = 8
bits para codificar instrucciones.
8 bits (codop) 4 bits (reg) 4 bits (reg)
Ahora con varios... (solución) III
Codificamos los códigos de operación de la siguiente manera
(cuidando respetar que no haya superposición con los códigos
de las otras instrucciones)
instrucción 1 → 11 000000
..
.
instrucción 32 → 11 011111
En total hay treinta y dos instrucciones de este tipo.
Tipo 4 instrucciones sin operandos.
Como este tipo de instrucciones no tiene operandos podemos
usar hasta dieciséis bits para el código de operación.
16 bits (codop)
Sin embargo, no necesitamos usar todas las combinaciones
posibles, alcanza con codificar las dieciséis operaciones pedidas.
instrucción 1 → 11 100000 0000 0000
..
.
instrucción 16 → 11 100000 0000 1111
En total, dieciséis instrucciones de este tipo.
Un caso real...MSP430

El microcontrolador msp430 tiene dieciséis registros de 16 bits,


igual tamaño de palabra y cuenta con instrucciones de dos, uno y
ningún operando y saltos.
Los modos de direccionamiento posibles son Registro, Indexado,
Registro indirecto e Inmediato.
Más datos:
MSP430
Instrucciones y modos de direccionamiento

Dos operandos Uno o ningún operando Saltos


1 MOV src,dst MOV.B src,dst RRC dst RRC.B dst JEQ/JZ Label
Tamaño de los operandos:
2 ADD src,dst ADD.B src,dst RRA dst RRA.B dst JNE/JNZ Label 1 byte si la instrucción
3 ADDC src,dst ADDC.B src,dst PUSH src PUSH.B src JC Label
4 SUB src,dst SUB.B src,dst SWBP dst JNC Label termina con .B
5 SUBC src,dst SUBC.B src,dst CALL dst JN Label
6 CMP src,dst CMP.B src,dst RETI JGE Label
1 word en caso contrario
7 DADD src,dst DADD.B src,dst SXT dst JL Label
8 BIT src,dst BIT.B src,dst JMP Label Los jumps son saltos
9 BIC src,dst BIC.B src,dst relativos de 10 bits.
10 BIS src,dst BIS.B src,dst
11 XOR src,dst XOR.B src,dst
12 AND src,dst AND.B src,dst

Los modos de direccionamiento posibles son: Modos de los operandos:


Modo Sintaxis Descripción
Registro Rn El operando es el contenido del registro. src todos los modos
Indexado X(Rn ) [Rn + X ] apunta al operando. X es un constante y
esta en la siguiente palabra. dst sólo los 2 primeros
Registro indirecto @Rn El operando está en [Rn ].
Inmediato #N La palabra siguiente contiene la constante N.
MSP430

1. Diseñar el formato de instrucción de 16 bits (sin contar los


operandos adicionales).
2. El set de instrucciones del msp430 no incluye la instrucción
de salto condicional JLEU (menor o igual en notación sin
signo). ¿Cómo podrı́a simularse?
MSP430 (solución) I
1. Para codificar el operando dst usando log2 (2) = 1 bit.
0 → Registro
1 → Registro indirecto
Para codificar los cuatro modos del operando src deberemos usar dos
(log2 (4) = 2) bits.
00 → Registro
01 → Registro Indirecto
10 → Indexado
11 → Inmediato
Entonces, cada operando necesita:
I dst: 1 bit modo de direccionamiento + 4 bits registro = 5 bits
I src: 2 bits modo de direccionamiento + 4 bits registro = 6 bits
Separamos los tipos de instruccion:
Tipo 1 operaciones de dos operandos.
Hay doce operaciones de dos operandos. Para el código
de operación, disponemos de 16 − 5 − 6 − 1 = 4 bits.
4 bits (codop) 1 bit (b/w) 6 (src) 5 bit (dst)
MSP430 (solución) II
Codificamos las doce operaciones de dos operandos:
0000 → MOV
..
.
1011 → AND
Tipo 2 operaciones de ningún o un operando.
Hay siete operaciones de este tipo. Disponemos de
16 − 6 − 1 = 9 bits para el código de operación.
9 bits (codop) 1 bit (b/w) 6 bit (dst/src)
Codificamos las siete operaciones.
1100 0000 0 → RRC
..
.
1100 0011 0 → SXT
Algunas aclaraciones sobre este tipo de instrucción:
I para SWBP, CALL, RETI y SXT el bit b/w
queda en 0;
I para RETI, el campo dst/src queda en 0;
I para PUSH, se completa el campo dst/src con
un 0 en el bit más significativo.
MSP430 (solución) III

Tipo 3 Saltos.
Tenemos que incluir un desplazamiento de diez bits. Por
lo cual quedan 16 − 10 = 6 bits para usar como códigos
de operación.
6 bits (codop) 10 bits (desplazamiento)
Codificamos los ocho saltos:
110001 → JEQ/JZ
..
.
111001 → JMP
2. El salto JLEU se toma si se cumple la condición C or Z. Por otra parte,
contamos con las instrucciones JZ y JC. Entonces, usando etiquetas,
podemos hacer una macro del salto usando estas instrucciones. La
instrucción “JLEU Etiqueta” se simula como:
JZ Etiqueta
JC Etiqueta
Lo que viene, lo que viene...

Con lo visto hasta ahora pueden hacer las prácticas 1, 2 y 3.


Las próximas fechas:
I Jueves 5 - 17hs: consultas, consultas y más consultas
I Martes 10 - 17hs: primer parcial en el Aula 8

También podría gustarte