Depto de Computación – FCEyN – UBA 8-Mayo-2007 Organización del Computador I 1er. Parcial El examen es a libro abierto. Se puede utilizar todo lo definido en las prácticas y todo lo que se dio en clase, colocando referencias claras. No se pueden compartir apuntes. Justifique cada una de sus respuestas. Especifique, en caso de ser necesario, todos los cálculos intermedios utilizados. El examen debe ser entregado en tinta. Para aprobar el parcial, son necesarios 60 (sesenta) puntos. Para promocionar, 80 (ochenta) puntos 1) (15p) Dada la siguiente operación: + 1111 01001111 01111000 11000111 Acarreos Verifique la correctitud del resultado interpretando los sumandos y el resultado en los diferentes sistemas de numeración para números enteros (sin signo, con signo, complemento a dos y exceso). En cada sistema de numeración indique además el estado de los flags. De ser incorrecto el resultado, indique para los sumandos dados, la posible cadena de bits que representa el resultado correcto. SOLUCIÓN (amanna): Sin Signo: La interpretación en decimal es: 79 + 120 = 199 y es correcto. Los flags CZNV=0000 Acá se podría decir también que los flags son CZNV=0010 (o sea el negativo en 1 pero que se ignora porque estamos trabajando con números sin signo) Con Signo: La interpretación en decimal es: 79 + 120 = -71 . Esto no está bien. Además la cuenta está mal, dado que está sumando el primer bit que es de signo. La cuenta correcta sería: 01001111 Î 79 +01111000 Î 120 01000111. Î 71, lo cual está mal. Es decir, la cuenta está bien hecha pero da da overflow. La cuestión es que en con signo con 8 bits el máximo positivo a representar sería: 127. No llega a 199. Los flags CZNV= 1001 Complemento a dos: La interpretación decimal es: 79 + 120 = -57. Esto no está bien. Si se interpretan los números en C2, se ve que sumando dos positivos, el resultado es negativo y por lo tanto hay overflow. No puedo representar el 199 porque el máximo positivo es 127. Los flags CZNV= 0011 Exceso: Como tengo 8 bits, tomo el exceso k-1=7 para que haya igual cantidad de números negativos y positivos, es decir exceso 27 = 128 O sea: 01001111 = 79 – 128 = -49 01111000 = 120 – 128 = -8 11000111 = 199 – 128 = 71 Los flags CZNV= 0001 Obviamente la cuenta no da. Debería dar -57, que se representa como: -57 + 128 = 71 = 01000111 (o sea el primer bit en 0 porque es un número negativo) 2) (15p) Sea la siguiente representación de números reales: Mantisa 8 bits Exponente 4 bits La codificación del exponente es complemento a 2 de 4 bits. La codificación de la mantisa es punto fijo con signo, utilizando 1 bit de signo, 1 bit para la parte entera y los 6 bits restantes para la parte fraccionaria. La base del exponente es 2. (4p) a) ¿Cuántos bits de exponente necesitaría tener para poder codificar el número 0, 0000610351562510 de forma exacta? (4p) b) Determine el mayor y el menor número real codificable. Depto de Computación – FCEyN – UBA 8-Mayo-2007 Organización del Computador I 1er. Parcial (4p) c) ¿Qué números reales fueron codificados en 0x03F y 0xFF4? (3p) d) ¿La representación es única? SOLUCIÓN (dgonzalez): a) Se necesitan al menos los 8 bits de la mantisa y 4 para el exponente. (2^(-6)*2^(-8)) b) El mayor numero es 011111110111 = ((-1) ^ 0)*(1-2^(-6)+1)*2^(7) = 254 El menor numero es 111111111111 = ((-1) ^ 1)* (1-2^(-6)+1)*2^(7) = -254 c) 0x03F = 0000 0011 1111 = +(2^(-5)+2^(-6))*2^(-1) 0xFF4 = 1111 1111 0100 = -(1-2^(-6)+1)*2^(4) d) No tiene representación única si tomamos 0100 0000 0000 y 0010 0000 0001 representan el 1. 3) (25p) El microcontrolador MSP430 tiene 16 registros (R0. . .R15) de 16 bits (tamaño de la palabra). Posee las siguientes instrucciones: Dos Operandos MOV(.B) src,dst ADD(.B) src,dst ADDC(.B) src,dst SUB(.B) src,dst SUBC(.B) src,dst CMP(.B) src,dst DADD(.B) src,dst BIT(.B) src,dst BIC(.B) src,dst BIS(.B) src,dst XOR(.B) src,dst AND(.B) src,dst Un/Ningún Operando RRC(.B) dst RRA(.B) dst PUSH(.B) src SWPB dst CALL dst RETI SXT dst Jumps JEQ/JZ Label JNE/JNZ Label JC Label JNC Label JN Label JGE Label JL Label JMP Label 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 Registro Indexado Inmediato Sintaxis Rn X(Rn) #N Descripción El contenido del registro es el operando. (Rn+X) apunta al operando. X es guardado en la siguiente palabra. La palabra siguiente contiene la constante absoluta N. Los operandos src pueden tener cualquiera de los 3 modos de direccionamiento. Por otro lado, los operandos dst pueden tener sólo los primeros 2 modos. (20p) a) Se pide diseñar el formato de instrucción de 16 bits, más operandos adicionales según describen los modos de direccionamiento. (5p) b) El set de instrucciones del MSP430, no incluye la instrucción de salto condicional JLEU (menor o igual en notación sin signo). ¿Cómo podría simularse? SOLUCIÓN (dgonzalez): a) Modo SRC Registro 00 Indexado 01 Inmediato 11 Registros SRC/DST R0 000 R1 001 R2 010 R3 011 Modo DST Registro 0 Indexado 1 Registros SRC/DST R4 100 R5 101 R6 110 R7 111 Depto de Computación – FCEyN – UBA 8-Mayo-2007 Organización del Computador I 1er. Parcial Byte / Word Byte 1 Word 0 Código de operación Byte/Word Modo DST Instrucción tipo 1: Modo SRC - - - - - - - Instrucción MOV ADD ADDC SUB SUBC CMP - SRC - - Código 0001 0010 0011 0100 0101 0110 DST - - Instrucción DADD BIT BIC BIS XOR AND - - - - Código 0111 1000 1001 1010 1011 1100 Código de operación 1 1 0 - - Instrucción RRC RRA PUSH - 0 0 0 - Código 000 001 010 Modo DST/SRC Byte/Word Instrucción tipo 2: - - Instrucción SWPB CALL SXT RETI DST/SRC - - - - Código 011 100 101 111 Nota: Para SWPB, CALL y SXT que no utilizan el bit de Modo DST/SRC entonces el bit vale 0. Para la instrucción RETI el bit de Modo DST/SRC vale 0 y los 4 bits de DST/SRC también valen 0. Instrucción tipo 3: Código de Jcc 1 1 1 - Instrucción JEQ/JZ JNE/JNZ JC JNC - Label / Etiqueta - Código 000 001 010 011 - - - - - - Instrucción JN JGE JL JMP - - - - Código 100 101 110 111 b) Puede utilizarse un salto por igualdad (JZ) y luego un salto por carry (JC), para simular el salto de menor o igual sin signo. 4) (20p) Se pide construir el módulo que decodifica el modo de direccionamiento de la arquitectura ORGA1. El dispositivo tiene 6 entradas (e1,..., e6) que indican los 6 bits que identifican el tipo de direccionamiento y una salida por cada tipo de direccionamiento y registro. En caso que el modo no incluya registro debe devolverse 0 en las salidas de los registros. Depto de Computación – FCEyN – UBA 8-Mayo-2007 Organización del Computador I 1er. Parcial 0 1 2 DECO SOLUCIÓN (dgonzalez): 0 1 2 DECO e1 e2 e3 e4 e5 e6 0 1 2 3 4 5 6 7 Inmediato Directo Indirecto Registro Indirecto Registro Indexado R0 R1 R2 R3 R4 R5 R6 R7 0 1 2 3 4 5 6 7 (Otra opción para su resolución seria construir los decodificadores con compuertas básicas) 5) (25p) Dado el siguiente código escrito en arquitectura ORGA1 y el vuelco de memoria que se encuentra debajo. Suponiendo que el programa se encuentra cargado a partir de la posición 0x6140. Todos los flags y registros comienzan en 0, excepto el Program Counter cuyo valor inicial es 0x6143 y el Stack Pointer que empieza en 0xFFEE. dato1 dato2 cont inicio : : : : resto : comparo : 4530 +0 F303 +1 ABCD inc : fin : +2 21E2 +3 6530 DW 0x1C18 DW 0x4532 DW 0x4533 MOV R1,dato1 MOV R2,[dato2] ADD R2,[R1] SUB [R2],[[cont]] CMP R1,R3 JE fin ADD R3,1 JMP comparo MOV [R2],FFFF ret +4 8000 +5 1840 +6 95B3 +7 C925 +8 A639 +9 ECBD +A FAF0 +B ABCD +C D788 +D A631 +E F17B (5p) a) Indicar las direcciones de memoria donde se encuentra cada instrucción. (5p) b) Mostrar cual es la codificación del salto condicional. (15p) c) Realizar un seguimiento del programa hasta encontrar una instrucción inválida. ACLARACIÓN: No hace falta hacer la decodificación detallada para cada instrucción. Alcanza con indicar cuantos operandos tiene y el tamaño total que ocupa en memoria cada instrucción. +F 49F6 Depto de Computación – FCEyN – UBA 8-Mayo-2007 Organización del Computador I 1er. Parcial SOLUCIÓN: a) Posición 0x6140 0x6141 0x6142 0x6143 0x6145 0x6147 0x6148 0x614A 0x614B 0x614C 0x614E 0x6150 0x6152 Etiquetas dato1 : dato2 : cont : inicio : Instrucciones DW 0x1C18 DW 0x4532 DW 0x4533 MOV R1,dato1 MOV R2,[dato2] ADD R2,[R1] SUB [R2],[[cont]] CMP R1,R3 JE fin ADD R3,1 JMP comparo MOV [R2],FFFF ret resto : comparo : inc : fin : b) JE fin 1 1 1 1 0 0 F 0 1 1 0 0 0 0 0 0 1 0 0 4 c) PC 0x6143 0x6145 0x6147 0x6148 0x614A Instrucción MOV R1, dato1 MOV R2, [dato2] ADD R2, [R1] SUB [R2], [[cont]] 0x0333 Deco. INVALIDA Fech de Ins. 0x6144 0x6146 0x6148 0x6149 Flags - Fech de Datos 0x6145 0x6147 0x6148 0x614A Acción R1 = 0x6140 R2 = 0x4532 R2 = 0x4532 + [0x6140] = 0x614A [0x614A] = 0x6863 – 0x6530 = 0x0333