Você está na página 1de 6

Organizacion del Computador 1 - Verano 2009 Modos de direccionamiento y formatos de instruccion

Clase Practica - Modos de direccionamiento y formatos de


instruccion
Organizacion 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) cuantas instrucciones de 1 direccion puede tener?
b) Diga cual es el tamano maximo 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)

Solucion de jgaleotti.
a) La longitud total de la instruccion son 32 bits. Las instrucciones de 2 operandos deben llevar
2 direcciones. Cada direccion 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 instr. 1


0000 0001 instr. 2
... ... ...
1111 1001 instr 250

Con 8 bits puedo representar 28 = 256 instrucciones distintas. Por lo tanto, me quedan
256250 = 6 combinaciones sin utilizar. Para las instrucciones de 1 operando tengo 3212 =
20 bits para el codop.
Tipo 2: Instrucciones de 1 operando:

20 bits (codop) 12 bits (dir)

De esos 20 bits, hay no estan disponibles todas las combinaciones posibles (ya que algunas
son usadas para el Tipo 1). Por lo tanto:
De los primeros 8 bits del codop, solo puedo usar 6 combinaciones (del 1111 1010 al
1111 1111)
1 Ejercicio 7 del captulo 5, L. Null & J. Lobur, Essentials of Computer Organization and Architecture
2 Codigo de operacion
Organizacion del Computador 1 - Verano 2009 Modos de direccionamiento y formatos de instruccion

De los restantes 12 bits del codop, puedo usar todas las combinaciones (212 = 41024 =
4096
Por lo tanto, puedo codificar un maximo 6 4096 = 24576 instrucciones de 1 operando.

1111 1010 0000 0000 0000 instr. 1


1111 1010 0000 0000 0001 instr. 2
... ... ...
1111 1111 1111 1111 1111 instr 24576

b) Tengo 212 direcciones. Cada direccion contiene 1 Byte. Por lo tanto, el tamano maximo
es 212 1B = 4 KB3
Tengo 212 direcciones. Cada direccion contiene 2 Bytes. Por lo tanto, el tamano maximo
es 212 2B = 8KB
Tengo 212 direcciones. Cada direccion contiene 4 Bytes. Por lo tanto, el tamano maximo
es 212 4B = 16KB

Ejercicio 2 Diga cuantos 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.

Solucion 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 tamano fijo de
16 bits y tamano del bus de direcciones de 7 bits. Disenar un formato de instruccion para codificar:
2 instrucciones con dos operandos a memoria.

8 instrucciones con un registro y un operando a memoria.


3 1KB = 210 B
Organizacion del Computador 1 - Verano 2009 Modos de direccionamiento y formatos de instruccion

32 instrucciones con dos registros.


16 instrucciones sin operandos.

Solucion 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 instruccion 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 instr1
01 instr2

En total, 2 instrucciones de este tipo.


Tipo 2: instrucciones con 1 registro y 1 direccion En este caso, tengo 1 registro y 1 direccion
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 utilice)

10 000 instr 1
... ...
10 111 instr 8

En total, 8 instrucciones de este tipo.


Tipo 3: instrucciones con 2 registros Para este tipo de instruccion, 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 superposicion
con los codops de las otras instrucciones)

11 000000 instr 1
.. ...
11 011111 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)
Organizacion del Computador 1 - Verano 2009 Modos de direccionamiento y formatos de instruccion

Sin embargo, no necesito codificar todas, me alcanza con codificar las 16 instrucciones pedidas
por el enunciado.

11 100000 0000 0000 instr1


... ...
11 100000 0000 1111 instr16

En total, 16 instrucciones de este tipo.


Tarea: Cuantas instrucciones sin operandos podramos agregar como maximo?

Ejercicio 4 El microcontrolador MSP430 tiene 16 registros de 16 bits (tamano de la palabra).


Posee las siguientes instrucciones:

Dos Operandos Un/Ningun Operando Jumps


MOV(.B) src,dst RRC(.B) dst JEQ/JZ Label
ADD(.B) src,dst RRA(.B) dst JNE/JNZ Label
ADDC(.B) src,dst PUSH(.B) src JC Label
SUB(.B) src,dst SWPB dst JNC Label
SUBC(.B) src,dst CALL dst JN Label
CMP(.B) src,dst RETI JGE Label
DADD(.B) src,dst SXT dst JL Label
BIT(.B) src,dst JMP Label
BIC(.B) src,dst
BIS(.B) src,dst
XOR(.B) src,dst
AND(.B) src,dst

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 Sintaxis Descripcion
Registro Rn El contenido del registro es el operando.
Indexado X(Rn ) (Rn + X) apunta al operando. X es guardado
en la siguiente palabra.
Registro Indirecto @Rn Rn es usado como un puntero al operando.
Inmediato #N 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 solo los primeros 2 modos.

a) Se pide disenar el formato de instruccion de 16 bits, mas operandos adicionales segun de-
scriben los modos de direccionamiento.
Solucion de jgaleotti. Comenzaremos la solucion por la codificacion de los modos de direc-
cionamiento. Del enunciado sabemos que el operando dst solo puede tener direccionamiento
Registro y Registro Indirecto. Mientras que el operando src puede tener cualquier direc-
cionamiento.
Por lo anterior, podramos codificar los 2 modos de direccionamiento del operando dst usando
log2 (2) = 1 bit.

0 Registro
1 Registro Indirecto
Organizacion del Computador 1 - Verano 2009 Modos de direccionamiento y formatos de instruccion

Mientras que para codificar los 4 modos de direccionamiento del operando src usamos
log2 (4) = 2 bits.

00 Registro
01 Registro Indirecto
10 Indexado
11 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
instruccion 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 MOV
... ...
1011 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 RRC
... ...
1100 00110 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 mas 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 JEQ/JZ
... ...
111001 JMP

b) El set de instrucciones del MSP430, no inlcuye la instruccion de salto condicional JLEU


(menor o igual en notacion sin signo). Como podra simularse?
Solucion de jgaleotti. El salto JLEU se toma si se cumple la condicion 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 instruccion JLEU Etiqueta se simula como:
Organizacion del Computador 1 - Verano 2009 Modos de direccionamiento y formatos de instruccion

JZ Etiqueta
JC Etiqueta

Você também pode gostar