Práctica 3 - Arquitectura del CPU Organización del Computador 1 Primer cuatrimestre de 2012 Ejercicio 1 A partir de cada uno de los siguientes vuelcos parciales de memoria y estados del procesador, realizar un seguimiento simulando ciclos de instrucción hasta encontrar una instrucción inválida (es decir, una instrucción cuyo código de operación no figure entre los del conjunto de instrucciones). La arquitectura de la máquina es la descripta al final de esta práctica. Indicar qué celdas de memoria se modifican y el estado final del procesador. a) Ayuda: la quinta instrucción a ejecutar es inválida. PC A644 A630 A640 0 2EFD FEDC R0 R4 1 0053 7081 2 0225 A1C1 035D E7A0 R1 R5 3 0000 C925 4 0052 223D 034C A622 R2 R6 5 C925 A639 6 F303 002B 8A6B 1A2B 7 1A2B FAF0 R3 R7 8 5600 48A7 0300 3898 9 5B4C 6880 Z C A A4D6 9C40 0 0 B 88C0 0000 N V 0 0 C 0000 0348 D A200 4AF3 E 034B A000 F A631 0340 E 48A7 0000 F 6880 9C40 b) Ayuda: la quinta instrucción a ejecutar es inválida. PC 2532 2520 2530 0 F303 034B R0 R4 1 ABCD A631 2 2FE2 5D40 035D E7A0 R1 R5 3 2530 5432 4 8000 F205 034C 2521 5 253E A200 R2 R6 8000 1A2B 6 FEDC 253C 7 7081 2EFD R3 R7 8 A1C1 0053 A622 FFF4 9 C925 0225 Z C A 223D 9200 0 0 B A639 2524 N V 0 0 C 002B 2624 D FAF0 2525 c) Ayuda: la cuarta instrucción a ejecutar es inválida. PC 0358 0340 0350 0 FAF0 88C0 1 0053 FFFF R0 R4 2 0000 A1C1 035F 27A3 R1 R5 3 8EC0 A200 4 0349 0348 C2A3 0122 5 6925 0000 R2 R6 6 0340 0225 2940 0352 7 1A2B 5200 8 0350 3621 R3 R7 9 6023 0344 034F 0359 A 0000 FBEE Z C B 0000 2940 0 0 N V C A000 FFFF 0 0 D C925 563B E 034B FFFF F 5E6F F303 Ejercicio 2 Desensamblar el siguiente programa escrito en lenguaje de máquina ORGA1. 0001 1000 0000 0000 0000 0000 1111 1111 0001 1000 0100 0000 0001 0000 0000 0000 0010 1000 0010 0001 Ejercicio 3 Traducir el siguiente programa de lenguaje C a lenguaje de la máquina ORGA1. Usar los registros R0 y R1 como contenedores de las variables x e y respectivamente; 1 2 3 int x = 2; int y = 32; x = x + y; 1 Ejercicio 4 Dados los siguientes valores de la memoria y del registro R0 de la arquitectura ORGA1, ¿qué valores cargan en el registro R1 las siguientes instrucciones? a) MOV R1, 20 (inmediato) Memoria Dirección 0020h 0030h 0040h 0050h b) MOV R1, [20] (directo) c) MOV R1, [[20]] (indirecto) d) MOV R1, R0 (registro) e) MOV R1, [R0] (indirecto registro) Contenido 0040h 0050h 0060h 0070h Registros f) MOV R1, [R0 + 20] (indexado registro) Nombre R0 Contenido 0030h Ejercicio 5 Considere el siguiente programa escrito en assembler de la arquitectura ORGA1: Vector: Clave: Comienzo: Ciclo: Sigo: Sumo: Fin: a) El programa se ubica en la posición 0100h de la memoria. Los vectores se almacenan como valores contiguos de una palabra de tamaño. Para indicar la finalización del vector se utiliza el valor cero. Suponiendo que el vector contiene diez palabras, indicar el valor de cada una de las etiquetas. DW ... DW ... ... DW 0000 DW ... MOV R0, Vector MOV R1, [Clave] MOV R2, 0 MOV R3, [R0] CMP R3, 0 JE Fin CMP R3, R1 JE Sumo ADD R0, 1 JMP Ciclo ADD R2, 1 JMP Sigo RET b) Explicar qué hace el programa siguiendo su ejecución paso a paso. c) Escribir un pseudocódigo que refleje el comportamiento del programa. d) Mostrar un vector para el cual este programa no hace lo esperado. Ejercicio 6 Escribir el pseudocódigo y el programa en assembler de ORGA1 que recorra un vector de números codificados en notación complemento a 2 de 16 bits de precisión y devuelva el valor máximo y mı́nimo de dicho vector. La posición de inicio del vector es recibida en el registro R0 y su longitud en el registro R1. En los registros R2 y R3 deben guardarse el resultado del máximo y mı́nimo respectivamente. La solución debe recorrer el vector una única vez. Ejercicio 7 Considere el siguiente programa escrito en assembler de la arquitectura ORGA1. Valor: Inicio: Salida: JMP Inicio DW 0A0A MOV R0, [Valor] ADD R0, 0003 MOV [Valor], R0 RET a) Suponiendo que el programa se ubica en la posición FF0Eh de la memoria, indicar el valor de cada una de las etiquetas. b) ¿Qué diferencia habrı́a si se reemplaza la tercer instrucción por “Inicio: MOV R0, Valor”? 2 Ejercicio 8 La arquitectura ORGA1 posee operaciones aritméticas sobre números enteros codificados en notación complemento a 2 de 16 bits de precisión. El programa sumar64 realiza la suma en notación complemento a 2 de dos números enteros de 64 bits en esta arquitectura. En los registros R0 y R1 se indican las direcciones de cada número y en R2 se indica la posición de memoria en donde debe guardarse el resultado. Tanto los parámetros como el resultado se almacenan en orden little-endian. Se pide: a) Escribir el pseudocódigo del programa sumar64. b) Escribir sumar64 en código assembler de ORGA1. Ejercicio 9 sumaVector64 es una rutina que suma los valores de un vector de n posiciones de enteros de 64 bits codificados en notación complemento a 2. En R0 se recibe la cantidad de elementos que tiene el vector y en R1 la posición de memoria en donde está almacenado dicho vector. En R3 se recibe la posición de memoria en donde debe guardarse el resultado. Los elementos del vector y el resultado se almacenan en orden little-endian. Suponiendo que se cuenta con el programa sumar64 descripto en el ejercicio anterior, se pide: a) Escribir el pseudocódigo del programa sumaVector64. b) Escribir sumaVector64 en código assembler de ORGA1 (tener en cuenta las instrucciones de invocación, CALL, y de retorno, RET). Ejercicio 10 leftShift es una rutina que decala a izquierda. Recibe como parámetros el valor a shiftear en el registro R0 y la cantidad de posiciones en el registro R1 (entendido como un número entero sin signo). El resultado final queda en el registro R0. Se pide: a) Escribir el pseudocódigo del programa leftShift. b) Escribir leftShit en lenguaje assembler de ORGA1 (tener en cuenta las instrucción de retorno, RET). c) Aparte de R0 y R1, ¿la rutina altera el valor de otros registros? Modifique el programa de modo que preserve el valor de todos los registros salvo R0 y R1. Ejercicio 11 Dado el siguiente programa para la arquitectura ORGA1 cargado en la dirección de memoria 0000h. inicio: rutina: fin: once: cuatro: MOV ADD CMP DW DW JVS SUB RET DW DW R1, [[once]] [R1], 0x479E R1, R2 0x0007 0xFFEF fin R1, R2 0x000B 0x0004 Si se empieza a ejecutar con los registros del procesador en su estado inicial (R0 . . . R7, PC y flags en 0, SP en FFEFh) y asumiendo que la ejecución termina al intentar ejecutar una instrucción inválida, responder: a) ¿Cuál es la dirección de memoria denotada por cada etiqueta? b) Realizar el seguimiento del programa indicando el estado de los registros, flags y valores del stack en cada paso. Liste en orden las instrucciones ejecutadas. 3 Arquitectura ORGA1 Descripción General . Palabras de 16 bits. . Direccionamiento a palabra. . Espacio direccionable de 65536 palabras. . Espacio de direcciones dedicado a entrada/salida en las direcciones FFF0h-FFFFh. . Ocho registros de propósito general de 16 bits: R0..R7. . Program counter (PC) de 16 bits. . Stack pointer (SP) de 16 bits. La pila comienza en la dirección FFEFh. . Flags: Z (zero), N (negative), C (carry), V (overflow ). . Todas las instrucciones alteran los flags, excepto MOV, CALL, RET, JMP y Jxx. . De las que alteran los flags, todas dejan C y V en cero, excepto de ADD, SUB, CMP y NEG. Formato de instrucción Tipo 1 : Instrucciones de dos operandos 4 bits cod. op. operación MOV d, f ADD d, f SUB d, f AND d, f OR d, f CMP d, f ADDC d, f 6 bits destino 6 bits fuente cod. op. 0001 0010 0011 0100 0101 0110 1101 16 bits constante destino (opcional) 16 bits constante fuente (opcional) efecto d←f d ← d + f (suma binaria) d ← d − f (resta binaria) d ← d and f d ← d or f Modifica los flags según el resultado de d − f (resta binaria) d ← d + f + carry (suma binaria) Formato de operandos destino y fuente. Modo Inmediato Directo Indirecto Registro Indirecto registro Indexado Codificación 000000 001000 011000 100rrr 110rrr 111rrr Resultado c16 [c16] [[c16]] Rrrr [Rrrr] [Rrrr + c16] c16 es una constante de 16 bits. Rrrr es el registro indicado por los últimos tres bits del cdigo de operando. Las instrucciones que tienen como destino un operando de tipo inmediato son consideredas como inválidas por el procesador, excepto el CMP. Tipo 2 : Instrucciones de un operando Tipo 2a: Instrucciones de un operando destino. 4 bits cod. op. operacin NEG d NOT d cod. op. 1000 1001 6 bits destino 6 bits 000000 16 bits constante destino (opcional) efecto d ← 0 − d (resta binaria) d ← not d (bit a bit) 4 El formato del operando destino responde a la tabla de formatos de operando mostrada ms arriba. Tipo 2b: Instrucciones de un operando fuente. 4 bits cod. op. operacin JMP f CALL f cod. op. 1010 1011 6 bits 000000 6 bits fuente 16 bits constante fuente (opcional) efecto PC ← f [SP] ← PC, SP ← SP − 1, PC ← f El formato del operando fuente responde a la tabla de formatos de operando mostrada ms arriba. Tipo 3 : Instrucciones sin operandos 4 bits cod. op. operacin RET cod. op. 1100 6 bits 000000 6 bits 000000 efecto PC ← [SP+1], SP ← SP + 1 Tipo 4 : Saltos condicionales Las instrucciones en este formato son de la forma Jxx (salto relativo condicional). Si al evaluar la condición de salto en los flags el resultado es 1, el efecto es incrementar el PC con el valor de los 8 bits de desplazamiento, representado en complemento a 2 de 8 bits. En caso contrario la instrucción no produce efectos. 8 bits cod. op. Codop 1111 0001 1111 1001 1111 0010 1111 1010 1111 0011 1111 1011 1111 0100 1111 1100 1111 0101 1111 0110 1111 0111 Operacin JE JNE JLE JG JL JGE JLEU JGU JCS JNEG JVS 8 bits desplazamiento Descripcin Igual / Cero Distinto Menor o igual Mayor Menor Mayor o igual Menor o igual sin signo Mayor sin signo Carry / Menor sin signo Negativo Overflow Condición de Salto Z not Z Z or ( N xor V ) not ( Z or ( N xor V ) ) N xor V not ( N xor V ) C or Z not ( C or Z ) C N V ¿Cómo altera los flags? Sea r el resultado de una instrucción que modifica los flags, el nuevo valor es el que sigue: Z=1 ↔ r = 0x0000. N=1 ↔ el bit más significativo de r es igual a 1. C=1 ↔ se produjo carry durante una suma binaria o borrow durante una resta binaria. V=1 ↔ la suma de dos números con signo produce un número sin signo (S + S = S) ó la suma de dos números sin signo produce un número con signo (S + S = S) ó alguna analogı́a con la resta (S − S = S ó S − S = S) 5 Planilla de Seguimiento Organización del Computador 1 Flags PC Z C V SP N [SP+1] IR Instrucción (1er palabra) (en bits) PC fetch 2da palabra PC fetch 3er palabra PC Instrucción decodificada Ejecución