Trabajo Práctico 7 - Departamento de Ciencias e Ingeniería de la

Anuncio
Organización de Computadoras
Departamento de Ciencias e Ingeniería de la Computación
Universidad Nacional del Sur
Segundo Cuatrimestre de 2016
Trabajo Práctico N◦ 7
Arquitectura OCUNS
La arquitectura ocuns consta de 256 bytes de memoria principal, instrucciones de 16 bits
de tamaño y 16 registros de propósito general. Existen sólo 16 tipos diferentes de instrucciones,
las cuales se distinguen mediante los opcodes de 0 a F. Cada instrucción puede manipular
el contenido de la memoria principal, los registros de propósito general, o bien el PC de una
manera específica, como se resume a continuación:
Opcode
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Descripción
Formato
Pseudocódigo
add (add)
I
R[d] ← R[s] + R[t]
sub (subtract)
I
R[d] ← R[s] - R[t]
and (and)
I
R[d] ← R[s] & R[t]
xor (xor)
I
R[d] ← R[s] ˆ R[t]
lsh (left shift)
I
R[d] ← R[s] « R[t]
rsh (right shift)
I
R[d] ← R[s] » R[t]
load (load)
I
R[d] ← mem[offset + R[s]]
store (store)
I
mem[offset + R[d]] ← R[s]
lda (load address)
II
R[d] ← addr
jz (jump zero)
II
if (R[d] == 0) PC ← PC + addr
jg (jump greater)
II
if (R[d] > 0) PC ← PC + addr
call (jump and link)
II
R[d] ← PC; PC ← addr
jmp (jump register)
III
PC ← R[d]
inc (increment)
III
R[d] ← R[d] + 1
dec (decrement)
III
R[d] ← R[d] - 1
hlt (halt)
III
exit
Estas 16 instrucciones se organizan en tres categorías: aritmético-lógicas, transferencia entre
la memoria principal y los registros, y control de flujo. Cada una de las instrucciones consiste de
cuatro dígitos hexadecimales (esto es, 16 bits). El primer dígito hexadecimal codifica el opcode
de la instrucción. El segundo dígito hexadecimal representa a uno de los 16 registros de propósito
general, el cual denominaremos registro destino y denotaremos como d. La interpretación de los
últimos dos dígitos depende del formato de la instrucción. Para el primer formato de instrucción,
tanto el tercero como el cuarto dígito hexadecimal se interpretarán como sendos índices a
registros de propósito general, denominados registros origen y denotados como s y t. Por caso,
la instrucción 0462 suma el contenido de los registros s = 6 y t = 2, colocando el resultado
en el registro d = 4. En cambio, para el segundo formato de instrucción, los últimos dos dígitos
hexadecimales son interpretados como una dirección de memoria, la cual denotamos como addr.
Por caso, la instrucción 8462 almacena en el registro d = 4 la dirección de memoria addr = 62.
Finalmente, en el caso del tercer formato de instrucción, los dos últimos dígitos hexadecimales
no son requeridos.
A manera de síntesis, la siguiente tabla resume los distintos formatos de instrucción disponibles:
1
Trabajo Práctico N◦ 7
FORMATO
I
II
III
1
5 4
0 ×
1 0
1 1
1
3 2 1 0 9 8
× ×
dest. d
× ×
dest. d
× ×
dest. d
7
6 5 4 3 2 1 0
src. s
src. t / off.
address addr
-
La arquitectura ocuns representa a los enteros internamente en complemento a dos. Otra
particularidad de esta arquitectura es que el último registro de propósito general (registro F),
está cableado a cero, es decir, se comporta como si fuera un registro de sólo-lectura inicializado
a cero.
Ejercicios
1. En el contexto de la arquitectura OCUNS, descubrir qué instrucción permite llevar adelante cada una de las tareas indicadas a continuación:
a) Poner a cero al registro PC, sin modificar el contenido de los otros registros o de la
memoria.
b) Poner a cero el contenido del registro A.
c) Asignar el contenido del registro B al registro A.
d) No hacer nada.
2. Encontrar otras formas alternativas de resolver cada una de las tareas señaladas en el
ejercicio anterior.
3. Encontrar una secuencia de instrucciones que permitan simular el comportamiento de la
instrucción sub.
4. Suponiendo que las primeras ocho locaciones de memoria principal presentan el siguiente
contenido,
Locación Contenido
00
BA
01
08
02
20
03
10
Locación Contenido
04
00
05
02
06
05
07
FF
determinar el valor almacenado en el registro A luego de ejecutar cada una de las siguientes
secuencias de instrucciones:
a) 8B02; 0AFB
b) 8B03; 6AB0
c) 8B05; 6BB0; 6AB0
d) 8B06; 6BB0; 6BB0; 1ABF
e) 8B00; 6AB3; DB00; 4AAB
5. Encontrar sendas secuencias de instrucciones que permitan simular los siguientes modos
de direccionado:
2
Trabajo Práctico N◦ 7
a) Inmediato.
b) Absoluto.
c) Base.
d) Indexado.
e) Autoincrement.
f ) Autodecrement.
6. Escribir un procedimiento que permita duplicar el valor recibido en el registro A. ¿Qué
convenciones hacen falta estipular para que otros programas puedan hacer uso de la
funcionalidad brindada por este procedimiento?
7. Escribir un procedimiento que permita obtener el complemento a dos del valor recibido
en el registro A. ¿Es posible que al invocar a este procedimiento se preserve el contenido
de los restantes registros?
8. Suponiendo que se destina el registro 0 para que contenga la dirección de retorno al
invocar procedimientos y que el registro E contiene la dirección del tope de la pila del
sistema, cómo se debe modificar el procedimiento implementado en el inciso anterior para
que preserve el contenido de los restantes registros. ¿Hará falta modificar también al
programa que invoca al procedimiento en cuestión?
9. Escribir un procedimiento que reciba dos valores al tope de la pila del sistema y que al
retornar deje en el tope de la misma el resultado de multiplicar los operandos recibidos.
Adoptar las mismas convenciones para el manejo de la pila del sistema y para el pasaje
de la dirección de retorno usadas en el ejercicio anterior.
10. Considerando el siguiente fragmento de código ocuns:
loop:
lda
lda
add
load
add
inc
sub
jg
hlt
RA, 80
RB, 90
RC, RF, RF
RD, 0(RA)
RC, RC, RD
RA
RE, RB, RA
RE, loop
a) Ensamblar el programa en cuestión a partir de la dirección 0.
b) Describir someramente el propósito de este programa.
11. El manejo de la entrada y salida estándar puede ser incorporado a la arquitectura ocuns
mediante el uso de excepciones. Por caso, suponiendo que todo valor leído de la locación
de memoria FF es en realidad ingresado por el usuario mediante la entrada estándar
(teclado), y que todo valor almacenado en esa locación es en realidad mostrado por la
salida estándar (pantalla), escribir sendos programas que permitan llevar adelante las
siguientes tareas, indicando en cada caso el programa en lenguaje máquina resultante:
a) Ingresar una dirección de memoria y su contenido y que como resultado se modifique
esa locación de memoria de manera acorde.
3
Trabajo Práctico N◦ 7
b) Sumar una secuencia de números naturales ingresados por teclado, mostrando el resultado obtenido por pantalla. La secuencia ingresada por teclado finaliza al ingresar
un 0.
c) Leer una secuencia de números naturales por teclado para luego mostrar por pantalla
los elementos de esa secuencia en orden inverso. La secuencia ingresada por teclado
finaliza al ingresar un 0.
12. Teniendo en cuenta el siguiente fragmento de código ocuns:
loop:
lda
lda
lda
lda
add
add
add
store
jmp
RA, 01
RB, 01
RC, FE
RE, loop
R9, RA, RB
RA, RB, RF
RB, R9, RF
R9, 1(RC)
RE
a) Ensamblar el programa en cuestión a partir de la dirección 0.
b) Describir someramente el propósito de este programa.
c) Modificar el programa anterior para que sólo calcule los primero 10 valores.
d) Ensamblar nuevamente la variante desarrollada en el inciso anterior.
13. En el marco del siguiente fragmento de código ocuns:
lda
jmp
hlt
cont: call
loop: load
dec
store
jg
hlt
clearb: add
jmp
RA, cont
RA
R0, clearb
RB, -2(RA)
RB
RB, -2(RA)
RB, loop
RB, RF, RF
R0
a) Ensamblar el programa en cuestión a partir de la dirección 0.
b) Relocar el código máquina obtenido en el inciso anterior a partir de la dirección 100,
analizando en detalle qué instrucciones han de ser ajustadas y cuáles no.
c) En general, ¿qué instrucciones de la arquitectura ocuns son fuertes candidatas a
tener que ser actualizadas al ser relocado un programa?
4
Descargar