Makina-Lengoaia Lenguaje Máquina Informatika Fakultatea EHU 4-IX-2007 1. (1,5 puntos) A continuación se presenta el listado de ensamblaje correspondiente a un trozo de un programa en ensamblador TXORI. Ensambla las instrucciones cuyo código máquina no aparece en el listado y desensambla aquéllas en las que falta el código en ensamblador. Rellena para ello los huecos correspondientes. .title Sep07 DATU DEFINIZIOA / DEFINICION DE DATOS ------------------------------------@0000-> A: .value 5; @0001-> B: .value -4, 2, 3, 9, -1; @0006-> PILA: .word 40 ; ************************************************************************** PROGRAMAREN LISTATUA / LISTADO DEL PROGRAMA ------------------------------------------.proc main mova sp,PILA @0000: 1 ………………………………………………………………………………………… @000A: 100011 00001 ----- ---------------- 2 @000C: 100001 ----- ----- …………… push r1 call SUB1 3 @000E: 001100 11111 11111 0000000000000010 ………………………………………………………………………………………… @0014: 100000 ----- ----- ---------------- …………… retm .endp main .proc SUB1 @0016: 100011 11110 ----- ---------------- ………………………………………………………………………………………… @002A: 000001 00001 11110 1111111111111110 @002C: 4 @002E: 001011 00100 00010 -----------00001 @0030: 011101 00100 ----- 0000000000011010 ………………………………………………………………………………………… @004A: 000001 00011 11110 0000000000000010 @004C: 000100 00011 11110 1111111111111100 push r30 …………… ldd r1,-2[r30] for: ldd r2,1[r30] sub r4,r2,r1 5 …………… finfor: ldd r3,2[r30] 6 Makina-Lengoaia Lenguaje Máquina Informatika Fakultatea EHU 4-IX-2007 2. (1,25 puntos).En un computador cuya memoria se direcciona a nivel de byte disponemos del siguiente vuelco de memoria, en el que cada celda representa el contenido de 1 byte en hexadecimal. Las direcciones están expresadas en decimal. @450-> + 21 4E FF 86 19 05 64 55 AB 00 BB FC 55 FF 37 FF FF 33 41 BC FF B5 FF 00 FF 58 D1 B3 FF 88 FF E1 00 CD E6 17 93 A1 11 37 a. Indica cómo quedaría la memoria tras almacenar el número 11,45 en coma flotante (siguiendo el estándar de IEEE) a partir de la dirección 465. Para su representación utiliza 2 bytes, de los que 10 bits serán para indicar la mantisa y 6 bits para el exponente. La ordenación que se debe utilizar es big-endian. b. Si la representación es C2 y la ordenación little-endian, ¿en qué dirección se encuentra el valor -47 almacenado en dos bytes? c. A partir de la dirección 460 se encuentra almacenado un número de 2 bytes representado en C1. ¿Qué número es si se ha utilizado la ordenación big-endian? 3. (1,5 puntos).Diseña el juego de instrucciones, utilizando codificación expandida del código de operación, para una máquina con las siguientes características: a. El formato de instrucción es de longitud variable, con 2 longitudes posibles 16 y 32 bits (en cada caso el mínimo necesario). b. El juego de instrucciones utiliza 5 modos de direccionamiento: inmediato, directo de registro, absoluto, relativo e implícito. Para codificar estos operandos, se dispone de los siguientes datos: c. El mayor inmediato en C2 es el 127, d. La capacidad de memoria es de 256 kBytes, y direcciona palabras de 8 bytes e. Hay 64 registros en el banco de registros, f. El menor desplazamiento en C2 es el -64. g. Los tipos de instrucciones posibles y el número de instrucciones de cada tipo vienen a continuación: i. 14 instrucciones de 2 operandos: 2 registros, ii. 15 instrucciones de 1 operando inmediato, iii. 54 instrucciones de 1 operando relativo, iv. 2 instrucciones de 3 operandos: absoluto y 2 registros, v. todas las instrucciones posibles de 3 operandos: 3 registros. Describe de manera clara cómo consigues los códigos para ese juego de instrucciones. Indica el número máximo de instrucciones del quinto tipo que se pueden codificar. NOTA: NO ES NECESARIO DAR LOS CÓDIGOS DE OPERACIÓN EN BINARIO. Makina-Lengoaia Lenguaje Máquina Informatika Fakultatea EHU 4-IX-2007 4. (0,75 puntos) Escribe, para una máquina de dos operandos, la secuencia de instrucciones que implemente la siguiente expresión. Los modos de direccionamiento que se pueden utilizar en esta máquina son: relativo, directo de registro, inmediato y absoluto. X= A[I]*B+A[I+2] -7 Las características de esta máquina son las siguientes: las instrucciones y los datos ocupan 1 palabra, la unidad de direccionamiento es la palabra y las palabras son de 2 bytes. Las instrucciones que se pueden utilizar son MOV, MOVA e instrucciones aritméticas. El resultado es siempre el primer operando. 5. (2,25 puntos) Dada la siguiente secuencia de instrucciones de una máquina de tres operandos, calcula para cada instrucción su tiempo de ejecución y el tamaño que ocupa en memoria. ………… mova r2, C movi r3, #5 mul r4, 3[r2], B[r3] mul r5, A, #7 add r4, r4, r5 push r4 ……….. El conjunto de instrucciones de esta máquina esta formado por 60 instrucciones y sus códigos de operación son de longitud fija. El banco de registros está formado de 32 registros y dispone de un único bus de lectura. La memoria es de 32 Mbytes y su unidad de direccionamiento es el byte. Tiene un bus de datos de 16 bits. Todos los datos ocupan 2 Bytes y El mayor desplazamiento que se puede representar en complemento a 2 en esta máquina es el 215 - 1. Los tiempos de ejecución a tener en cuenta son los siguientes: tiempo de acceso a memoria 50 ns, tiempo de acceso a los registros 2 ns, tiempo de descodificación 2 ns y tiempo necesario para realizar cualquier operación en la ALU 20 ns. Makina-Lengoaia Lenguaje Máquina Informatika Fakultatea EHU 4-IX-2007 6. (2,75 puntos) a. Escribe en lenguaje ensamblador TXORI el programa que calcula las potencias de todos los elementos del vector Numeros elevados al número expresado en la variable Exponente, guardando cada resultado en la posición correspondiente del vector Potencias. Para ello debe utilizar la subrutina POT for (i=0; i<3; i++) Potencias(i)=POT(Exponente,Numeros(i)); El programa principal utiliza las siguientes variables: Exponente: .value 3; Numeros: .value 2, 4, 5; Potencias: .word 3; b. Escribe en lenguaje ensamblador TXORI la subrutina POT. Dibuja la pila con los bloques de activación, explicando claramente las posiciones y direcciones relativas de los distintos datos (parámetros, variables locales, ...) a los que se accede durante la ejecución del programa. Código C int POT (int i, int j) { int res; if (i > 1) { res=POT(i-1, j); return (res * j); } else return j; } Código Ada function POT (i:in integer; j: in integer) return integer is res: integer; begin if (i > 1) then res =POT(i-1,j); return(res * j) else return j; end if; end POT;