Page 1 Makina-Lengoaia Informatika Fakultatea EHU Lenguaje

Anuncio
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;
Descargar