Organizaci´ on del Computador 1 - Verano 2009
Modos de direccionamiento y formatos de instrucci´ on
Clase Pr´actica - Modos de direccionamiento y formatos de instrucci´on Organizaci´on del Computador 1 Verano 2009 Ejercicio 1 1 Una computadora tiene instrucciones de 32 bits y 12 bits para direccionamiento. Suponiendo que tiene 250 instrucciones de 2 direcciones, a) ¿cu´ antas instrucciones de 1 direcci´on puede tener? b) Diga cu´ al es el tama˜ no m´ aximo de la memoria en los siguientes casos: Direccionamiento a byte Direccionamiento a palabra de 16 bits Direccionamiento a doble palabra (cada palabra de 16 bits) Soluci´ on de jgaleotti. a) La longitud total de la instrucci´ on son 32 bits. Las instrucciones de 2 operandos deben llevar 2 direcciones. Cada direcci´ on tiene 12 bits. Por lo tanto, me quedan 32 − 12 − 12 = 8 bits para el codop2 Tipo 1: Instrucciones de 2 operandos: 8 bits (codop)
12 bits (dir1)
12 bits (dir2)
Tengo que codificar 250 instrucciones de 2 operandos, para los cuales tengo hasta 8 bits: 0000 0000 ... 1111
0000 0001 ... 1001
instr. 1 instr. 2 ... instr 250
Con 8 bits puedo representar 28 = 256 instrucciones distintas. Por lo tanto, me quedan 256−250 = 6 combinaciones sin utilizar. Para las instrucciones de 1 operando tengo 32−12 = 20 bits para el codop. Tipo 2: Instrucciones de 1 operando: 20 bits (codop)
12 bits (dir)
De esos 20 bits, hay no est´ an disponibles todas las combinaciones posibles (ya que algunas son usadas para el Tipo 1). Por lo tanto: De los primeros 8 bits del codop, s´olo puedo usar 6 combinaciones (del 1111 1010 al 1111 1111) 1 Ejercicio 2 C´ odigo
7 del cap´ıtulo 5, L. Null & J. Lobur, Essentials of Computer Organization and Architecture de operaci´ on
Organizaci´ on del Computador 1 - Verano 2009
Modos de direccionamiento y formatos de instrucci´ on
De los restantes 12 bits del codop, puedo usar todas las combinaciones (212 = 4∗1024 = 4096 Por lo tanto, puedo codificar un m´aximo 6 ∗ 4096 = 24576 instrucciones de 1 operando. 1111 1010 0000 0000 0000 1111 1010 0000 0000 0001 ... ... 1111 1111 1111 1111 1111
instr. 1 instr. 2 ... instr 24576
Tengo 212 direcciones. Cada direcci´on contiene 1 Byte. Por lo tanto, el tama˜ no m´aximo es 212 ∗ 1B = 4 KB3
b)
Tengo 212 direcciones. Cada direcci´on contiene 2 Bytes. Por lo tanto, el tama˜ no m´aximo es 212 ∗ 2B = 8KB Tengo 212 direcciones. Cada direcci´on contiene 4 Bytes. Por lo tanto, el tama˜ no m´aximo es 212 ∗ 4B = 16KB
Ejercicio 2 Diga cu´ antos bits son necesarios para poder direccionar la memoria en los siguientes casos: Memoria de 2GB con direccionamiento a Byte. Memoria de 2GB con direccionamiento a palabra de 16 bits. Memoria de 16GB con direccionamiento a doble palabra de 32 bits. Soluci´ on de jgaleotti. #direcciones = memoria / unidad de direccionamiento= 2 GB/ B = 2 ∗ 1024 M = 2 ∗ 1024 ∗ 1024 ∗ 1024 log2 (#direcciones) = log2 (2 ∗ 1024 ∗ 1024 ∗ 1024) = 31 #direcciones = 2 GB/2 B = 1024M = 1024 ∗ 1024 ∗ 1024 log2 (#direcciones) = log2 (1024 ∗ 1024 ∗ 1024) = 30 #direcciones = 16 GB/4 B = 4 ∗ 1024M = 4 ∗ 1024 ∗ 1024 ∗ 1024 log2 (#direcciones) = log2 (4 ∗ 1024 ∗ 1024 ∗ 1024) = 32
Ejercicio 3 Considere una computadora con 16 registros. Las instrucciones son de tama˜ no fijo de 16 bits y tama˜ no del bus de direcciones de 7 bits. Dise˜ nar un formato de instrucci´on para codificar: 2 instrucciones con dos operandos a memoria. 8 instrucciones con un registro y un operando a memoria. 3 1KB
= 210 B
Organizaci´ on del Computador 1 - Verano 2009
Modos de direccionamiento y formatos de instrucci´ on
32 instrucciones con dos registros. 16 instrucciones sin operandos. Soluci´ on de jgaleotti. Del enunciado sabemos que Las instrucciones tienen una longitud fija de 16 bits. El bus de direcciones 7 bits, por lo tanto, necesito 7 bits para codificar direcciones Hay 16 registros, por lo tanto necesito log2 (16) = 4 bits para codificar registros Intentaremos separar los tipos de instrucci´on de acuerdo a lo que dice el enunciado. Tipo 1: instrucciones 2 operandos memoria En este caso tengo 2 direcciones de memoria, por lo tanto tengo 16 − 7 − 7 = 2 bits para codificar instrucciones. 2 bits (codop)
7 bits (dir1)
7 bits (dir2)
Codifico los codops de la siguiente manera: 00 01
instr1 instr2
En total, 2 instrucciones de este tipo. Tipo 2: instrucciones con 1 registro y 1 direcci´on En este caso, tengo 1 registro y 1 direcci´on de memoria, por lo tanto me quedo con 16 − 4 − 7 = 5 bits para codificar instrucciones. 5 bits (codop)
4 bits (reg)
7 bits (dir)
Codifico los codops de la siguiente manera (recordando los prefijos de 2 bits que ya utilic´e) 10 000 ... 10 111
instr 1 ... instr 8
En total, 8 instrucciones de este tipo. Tipo 3: instrucciones con 2 registros Para este tipo de instrucci´on, tengo 2 registros, por lo tanto me quedo con 16 − 4 − 4 = 8 bits para codificar instrucciones. 8 bits (codop)
4 bits (reg)
4 bits (reg)
Codifico los codops de la siguiente manera (me cuido de respetar que no haya superposici´on con los codops de las otras instrucciones) 11 000000 .. 11 011111
instr 1 ... instr32
En total, 32 instrucciones de este tipo. Tipo 4: instr sin operandos Ahora, no hay operandos, por lo tanto, puedo usar hasta 32 bits para codificar instrucciones. 16 bits (codop)
Organizaci´ on del Computador 1 - Verano 2009
Modos de direccionamiento y formatos de instrucci´ on
Sin embargo, no necesito codificar todas, me alcanza con codificar las 16 instrucciones pedidas por el enunciado. 11 100000 0000 0000 ... 11 100000 0000 1111
instr1 ... instr16
En total, 16 instrucciones de este tipo. Tarea: ¿ Cu´ antas instrucciones sin operandos podr´ıamos agregar como m´aximo?
Ejercicio 4 El microcontrolador MSP430 tiene 16 registros de 16 bits (tama˜ no de la palabra). Posee las siguientes instrucciones: Dos Operandos MOV(.B) src,dst ADD(.B) src,dst ADDC(.B) src,dst SUB(.B) src,dst SUBC(.B) src,dst CMP(.B) src,dst DADD(.B) src,dst BIT(.B) src,dst BIC(.B) src,dst BIS(.B) src,dst XOR(.B) src,dst AND(.B) src,dst
Un/Ning´ un Operando RRC(.B) dst RRA(.B) dst PUSH(.B) src SWPB dst CALL dst RETI SXT dst
Jumps JEQ/JZ Label JNE/JNZ Label JC Label JNC Label JN Label JGE Label JL Label JMP Label
Las instrucciones trabajan todas con palabras, a menos que se agregue .B, en cuyo caso trabaja en modo Byte. Todos los jumps realizan un salto relativo de 10 bits. Los modos de direccionamiento posibles son: Modo Registro Indexado
Sintaxis Rn X(Rn )
Registro Indirecto Inmediato
@Rn #N
Descripci´on El contenido del registro es el operando. (Rn + X) apunta al operando. X es guardado en la siguiente palabra. Rn es usado como un puntero al operando. La palabra siguiente contiene la constante absoluta N.
Los operandos src pueden tener cualquiera de los 4 modos de direccionamiento. Por otro lado, los operandos dst pueden tener s´ olo los primeros 2 modos. a) Se pide dise˜ nar el formato de instrucci´on de 16 bits, m´as operandos adicionales seg´ un describen los modos de direccionamiento. Soluci´ on de jgaleotti. Comenzaremos la soluci´on por la codificaci´on de los modos de direccionamiento. Del enunciado sabemos que el operando dst s´olo puede tener direccionamiento Registro y Registro Indirecto. Mientras que el operando src puede tener cualquier direccionamiento. Por lo anterior, podr´ıamos codificar los 2 modos de direccionamiento del operando dst usando log2 (2) = 1 bit. 0 1
Registro Registro Indirecto
Organizaci´ on del Computador 1 - Verano 2009
Modos de direccionamiento y formatos de instrucci´ on
Mientras que para codificar los 4 modos de direccionamiento del operando src usamos log2 (4) = 2 bits. 00 01 10 11
Registro Registro Indirecto Indexado Inmediato
Entonces, cada operando necesita: dst: 1 bit modo de direccionamiento + 4 bits registro = 5 bits src: 2 bits modo de direccionamiento + 4 bits registro = 6 bits Separamos los tipos de instruccion: Tipo 1: Instrucciones de 2 Operandos Existen 12 instrucciones de 2 operandos. Cada instrucci´ on puede ser en modo Byte o en modo W ord. Para indicar el modo agregamos un 1 bit de modo. Para el codop, disponemos de a lo sumo 16 − 5 − 6 − 1 = 4 bits. 4 bits (codop)
1 bit (b/w)
5 (src)
6 bit (dst)
Codificamos las 12 instrucciones de 2 operandos 0000 ... 1011
MOV ... AND
Tipo 2: Instrucciones de 0/1 Operando Existen 7 instrucciones de 0/1 operandos. 3 de ellas puede ser en modo Byte o en modo W ord. En el peor de los casos, disponemos es de a lo sumo 16 − 6 − 1 = 9 bits. 9 bits (codop)
1 bit (b/w)
6 bit (dst/src)
Codificamos las 7 instrucciones de 0/1 operandos 1100 00000 ... 1100 00110
RRC ... SXT
Algunas aclaraciones sobre este tip de instruccion: • Para SWBP,CALL,RETI y SXT el campo b/w queda en 0. • Para RETI, el campo dst/src queda en 0 • Para PUSH, se completa el campo dst/src con un 0 en el bit m´as significativo. Tipo 3: Jumps En estas instrucciones tengo que incluir un desplazamiento de 10 bits. Por lo cual me quedan 16 − 10 bits para usar como codop. 6 bits (codop)
10 bits (desplazamiento)
Codificamos las 8 instrucciones de salto: 110001 ... 111001
JEQ/JZ ... JMP
b) El set de instrucciones del MSP430, no inlcuye la instrucci´on de salto condicional JLEU (menor o igual en notaci´ on sin signo). ¿C´omo podr´ıa simularse? Soluci´ on de jgaleotti. El salto JLEU se toma si se cumple la condici´on 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´ on JLEU Etiqueta se simula como:
Organizaci´ on del Computador 1 - Verano 2009
JZ Etiqueta JC Etiqueta
Modos de direccionamiento y formatos de instrucci´ on