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