Universidad simón Bolívar Departamento de Electrónica y Circuitos

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