Universidad simón Bolívar Departamento de Electrónica y Circuitos / Sección de Sistemas Digitales EC2721 – Arquitectura del Computador I Trimestre Enero – Marzo de 2008 – 25/02/2008 Nombre:________________________________ Carnet:___________ Parcial 1 (35 Puntos) 1) 10 Puntos. El siguiente microprograma corresponde a una instrucción de IJVM, que llamaremos INS. Analice el programa y responda: ins1 ins2 ins3 ins4 ins5 ins6 ins7 ins8 ins9 ins10 ins11 ins12 ins13 ins14 ins15 ins16 ins17 ins18 ins19 ins20 MAR = SP = SP -1; rd OPC=H=1 H = OPC = OPC + H + 1 H = OPC = OPC + H + 1 H = OPC = OPC + H + 1 H = OPC = OPC + H + 1 H = MDR OPC = H AND OPC H = 1 H = H << 8 H = H << 8 H = H << 8 H = H >> 1 H = H << 8 H = NOT H TOS = H AND TOS Z = OPC; if (Z) goto ins20; else goto ins18 TOS = TOS >> 1 OPC = OPC - 1; goto ins17 MDR = TOS; wr; goto Main1 a) ¿Cuántos argumentos posee la instrucción?. Justifique. (2 puntos) La instrucción utiliza 2 argumentos. Estos argumentos son tomados de las posiciones de memoria apuntados por SP y SP-1 b) ¿Qué lugares de memoria afecta el microprograma?¿Cuáles variables locales?¿Cuales posiciones de la pila (stack)?. Justifique (2 puntos) El microprograma descarta el valor en memoria apuntado por SP y sustituye el valor apuntado por SP-1 . c) ¿Qué uso importante se le ha dado a los registros H y OPC dentro del microprograma de la instrucción?. (3 puntos) En H se construyen 2 mascaras 0x0000001F y 0x7FFFFFFF, la primera para seleccionar los 5 bits menos significativos de la palabra guardada en la posición apuntada por SP-1 y la segunda para impedir que el signo de la palabra apuntada por SP se propague cuando la palabra se desplaza hacia la derecha. En OPC se almacenan los 5 bis menos significativos de lo apuntado por SP-1. d) ¿Qué operación realiza la instrucción?. Sea preciso en qué operandos maneja, si arroja o no un resultado y donde se guarda. (3 puntos) Guarda en SP-1 lo que habia en SP desplazado hacia la derecha, tantas veces como indican los 5 bits menos significativos de la palabra que inicialmente estaba en SP-1. El desplazamiento es lógico, es decir no propaga el signo. Etiquetas 2) 10 Puntos. Programación. Escriba el código en Assembler IJVM para Mic-1 correspondiente al siguiente programa en Lenguaje C. Sea riguroso(a) en el uso de las formalidades de programación, incluyendo el uso de directivas. Por favor escriba el programa en el espacio correspondiente, y use comentarios. Evaluación: • • • Estructura del programa =5 puntos. Uso del IJVM = 3 puntos. Precisión de la traducción = 2 puntos. #define void } num 15 main(void){ int res; res = f(num); int f(int n){ int i = 0; int j = 1; int k = 1; while (n ≥ j){ k = k + 2; j = j + k; i++; } return (i); } lazo: fin: Instrucciones .constant OBJREF 0xABAB num 15 .end-constant .main .var res .end-var LDC_W OBJREF LDC_W num INVOKEVIRTUAL F DUP ISTORE res HALT .end-main .method F(n) .var i j k .end-var BIPUSH 0 ISTORE i BIPUSH 1 DUP ISTORE j ISTORE k ILOAD n ILOAD j ISUB IFLT fin IINC k 2 ILOAD j ILOAD k IADD ISTORE j IINC i 1 GOTO lazo ILOAD i IRETURN Comentarios i=0 j=1 k=1 n-j if (n < j) fin k=k+2 j=j+k i=i+1 3) 15 Puntos. Para el siguiente programa, responda: a) Ensámblelo y cárguelo a partir de la dirección 0x0000 en la tabla. El método F(n) se ensambla a continuación del programa principal; complete apropiadamente los valores del índice y de la reserva de constantes. (7 Puntos) .constant OBJREF 0xABAB num 0x03 .end-constant .main .var resultado .end-var LDC_W OBJREF LDC_W num INVOKEVIRTUAL F DUP ISTORE resultado HALT .end-main .method F(n) ILOAD n IFEQ L1 BIPUSH 1 ILOAD n IF_ICMPEQ L1 LDC_W objref ILOAD n BIPUSH 2 ISUB INVOKEVIRTUAL F IRETURN L1: ILOAD n IRETURN .end-method Dirección 0x00010020 0x0001001C 0x00010018 0x00010014 0x00010010 0x0001000C 0x00010008 0x00010004 0x00010000 0x0000FFFC 0x0000FFF8 0x0000FFF4 0x0000FFF0 . . . . . . 0x00000040 0x0000003C 0x00000038 0x00000034 0x00000030 0x0000002C 0x00000028 0x00000024 0x00000020 0x0000001C 0x00000018 0x00000014 0x00000010 0x0000000C 0x00000008 0x00000004 0x00000000 Contenido 00 00 00 00 00 00 00 00 AB 0D 03 AB ac 64 15 0f 15 00 00 ff 02 00 13 15 b6 01 13 01 16 15 00 59 01 00 01 00 10 00 9f 10 01 02 36 b6 00 ac 02 02 00 00 01 99 00 00 00 13 b) Ejecute el programa a partir de las condiciones iniciales mostradas en la tabla y complete ésta indicando los valores de memoria y registros inmediatamente antes y después de la ejecución de las instrucciones INVOKEVIRTUAL e IRETURN, y antes del HALT. (8 puntos) Direcc. Cont. Inicial 0x20050 0x0001001F 0x2004C 0x0000001F 0x20048 0x00001000 0x20044 0x00001000 0x20040 0x00000100 0x2003C 0x0000001F 0x20038 0x00000101 0x20034 0x00001000 0x20030 0x0000001F 0x2002C 0x00001000 0x20028 0x00001000 0x20024 0x00000100 0x20020 0x0000001F 0x2001C 0x00000101 0x20018 0x00001000 0x20014 0x0001001F 0x20010 0x0000001F 0x2000C 0x00001000 0x20008 0x00001000 0x20004 0x00000100 0x20000 0x0000001F 0x1FFFC 0x00000101 0x1FFF8 0x00001000 0x1FFF4 0x0000001F 0x1FFF0 0x00001000 . . . SP TOS PC MBR LV CPP 0x00008000 0x00110010 0x00007FFC 0x00004000 Cont. Antes Cont. Después INVOKEVIRTUAL 1 0x0003 0xABAB 0x7FFC 0x0009 0x0003 0x8003 Cont. Antes Cont. Después INVOKEVIRTUAL 2 0x0002 0x0001 0xABAB 0x7FFC 0x0009 0x0003 0x8003 0x8001 0x0028 0x0001 0x8007 0x7FFC 0x0009 0x0003 0x8003 Cont. Antes Cont. Después IRETURN 2 0x0001 0x0001 0x8001 0x0028 0x0001 0x8007 0x7FFC 0x0009 0x0003 0x8003 0x0001 0x0001 0x8001 0x0028 0x0001 0x0001 0x7FFC 0x0009 0x0003 0x8003 Cont. Antes Cont. Después Final IRETURN2 0x0001 0x0001 0x8001 0x0028 0x0001 0x0001 0x7FFC 0x0009 0x0003 0x8003 0x0001 0x0001 0x8001 0x0028 0x0001 0x0001 0x7FFC 0x0009 0x0003 0x0001 0x0001 0x0001 0x8001 0x0028 0x0001 0x0001 0x7FFC 0x0009 0x0001 0x0001 0x0001 0x8002 0x0003 0x0007 0xB6 0x8004 0x8001 0x0012 0x15 0x8001 0x8006 0x0001 0x0026 0xB6 0x8008 0x8005 0x0012 0x15 0x8005 0x8009 0x0001 0x002C 0xAC 0x8005 0x8005 0x0001 0x0029 0xAC 0x8001 0x8005 0x0001 0x0029 0xAC 0x8001 0x8001 0x0001 0x000A 0x59 0x7FFC 0x8001 0x0001 0x000D 0xFF 0x7FFC