Anda di halaman 1dari 6

Universidad de Antioquia

Ingenierı́a Electrónica
Profesor: Felipe Cabarcas

Electrónica Digital II y Circuitos Digitales II, 2016-2

Taller LC3

Taller que se recomienda hacer de manera individual, no utilizar calculadora. El profesor está para responder
preguntas. Es importante preguntar, para que el profesor pueda aclarar a todo el grupo, cuando sea pertinente,
algunos temas.

1. Concentrándose ahora en los cambios que realiza la máquina de estados en los registros de propósito general.
Describa en palabras, lo que hace el programa mostrado en el Cuadro 1. Es decir, asuma que el valor almacenado
en el PC es x3700, y se deja que comience a oscilar el reloj y la máquina comenzará en el estado 18. Su trabajo
es ver los cambios en los registros justo antes de que la máquina llegue al estado 18 por tercera vez, y describir
que pasó. Nota: La instrucción xF025 detiene el procesador (ya veremos como más adelante), y por lo tanto se
usará como indicador de fin de programa.

Dir. Mem. Valor


x3700 x923F
x3701 x1261
x3702 xF025

Cuadro 1: Programa.

2. Basado en el programa que muestra el Cuadro 2, llene el Cuadro 3 con los valores de los registros, cada vez que
llegue al estado 18, pero con los valores justo antes de que entre en este.

Dir. Mem. Valor


x3200 x54A0
x3201 x1484
x3202 x1B7F
x3203 x07FD
x3204 xF025

Cuadro 2: Programa.

3. ¿es correcto el programa del Cuadro 3?. Explique.

4. Basado en el programa anterior, observando la traza (Cuadro 3) de los registros, si el objetivo del programador
era multiplicar los valores de R4 y R5 en R2, ¿es correcto el programa?. si no es correcto ¿Cómo lo corregirı́a?
(indicando en el Cuadro 2 que posición de memoria se debe cambiar y por que valor).
PC R2 R4 R5
x3201 0 10 3
x3202
x3203

Cuadro 3: Traza de registros para cada una de las instrucciones.

5. Si el programador del programa del Cuadro 2, corregido si fue necesario, cambia alguno de los valores de R4 o R5
por un número negativo, ¿funcionarı́a correctamente el programa?

6. Una de las estructuras básicas de programación es el bucle o ”loop”. Esta contiene: un bloque que comprueba si
una condición se cumple, que determina si se continúa o se sale del bucle. Contiene además un bloque de tareas que
se realizan cada vez que se ejecuta el bucle, y contiene una forma de saltar para volver a comprobar la condición.
Identifique estos 3 bloques en el programa del Cuadro 2.

7. ¿Qué instrucción realiza la ”magia”de cambiar el flujo de ejecución (PC+1) dependiendo de una condición?. En
esta pregunta, responda con el .opcode”(los 4 bits más significativos) de la instrucción. Además, explique que
posibilidades brinda esta instrucción con los bits 11, 10 y 9. Es decir, permite saltar si cero?, si es uno?, si el
registro 1 es 0?, etc. describa todas las posibilidades.

8. Escriba un programa (una o más instrucciones, cada una como palabra de 16 bits, pero escrı́balo en formato
hexadecimal), que permiten saltarse 8 instrucciones hacia adelante, si el registro 5 es menor que -17.

9. Basado en el programa que muestra el Cuadro 4, llene el Cuadro 3 con los valores de los registros, cada vez que
llegue al estado 18, pero con los valores justo antes de que entre en este.

10. Para entender que realiza un programa, es usual escribir al frente de cada instrucción, que función realiza esta.
Indicando como se modifica cada registro o posición de memoria. Por ejemplo, la instrucción de la posición x3000
del programa del Cuadro 4 es una AND con el inmediato 0, por lo tanto se puede escribir R1 ← R1 AND x0000.
Esta se puede simplificar a R1 ← 0, ya que una AND con 0, siempre da 0. Otro ejemplo, para la instrucción de
la dirección x3003, se puede escribir R2 ← M[PC+x00FC], y dado que el PC en este caso serı́a x3004, entonces se
puede escribir R2 ← M[x3100]. Su trabajo es completar las demás instrucciones del programa del Cuadro 4.
En muchos casos, no es posible determinar algún valor, porque este depende de los datos, por lo tanto se deben
dejar indicados, especificando por el ejemplo el registro usado.

11. Basado en el Cuadro 5, y asumiendo que el programador querı́a realizar un programa que sumara 10 números, a
partir de la posición x3100, en el registro R1, ¿puede usted determinar si el programa es correcto o no?. si no es
correcto, proponga una manera de corregirlo.
Dir. Mem. Valor
x3000 x5260
x3001 x5920
x3002 x192A
x3003 x24FC
x3004 x6680
x3005 x14A1
x3006 x1243
x3007 x193F
x3008 x03FB
x3009 xF025
... ...
x3100 x3107
x3101 x2819
x3102 x0110
x3103 x0310
x3104 x0110
x3105 x1110
x3106 x11B1
x3107 x0019
x3108 x0007
x3109 x0004
x310A x0000
x310B x0000

Cuadro 4: Programa.
PC R1 R2 R4
x3001 0 x x
x3002
x3003
x3004
x3005
x3006

Cuadro 5: Traza de registros para cada una de las instrucciones.


IR[11:9] IR[11:9]
110 DR IR[8:6] SR1
111 110

DRMUX SR1MUX

(a) (b)

IR[11:9]

N Logic BEN
Z
P

18
MAR <–PC
PC<–PC+1
[INT] 1
0
33 To 49
(See Figure C.7)
MDR<–M

R R
35
IR<–MDR

32
RTI 1101
To 8 BEN<–IR[11] & N + IR[10] & Z + IR[9] & P
To 13
(See Figure C.7) ADD [IR[15:12]] BR

AND
0
JMP
1 NOT
DR<–SR1+OP2* TRAP JSR [BEN] 0
set CC LEA LD LDR LDI STI STR ST
1
22
To 18 5
DR<–SR1&OP2* PC<–PC+off9
set CC
12
To 18 9
DR<–NOT(SR) To 18
PC<–BaseR
set CC
4
To 18 15
R7<–PC To 18
MAR<–ZEXT[IR[7:0]]
10 11
[IR[11]]
1 0
28 MAR<–PC+off9 MAR<–PC+off9
MDR<–M[MAR] 21
R7<–PC PC<–PC+off11
24 29
R R
30 MDR<–M[MAR ] MDR<–M[MAR]
PC<–MDR 20
R R R R To 18
PC<–BaseR
6 7
To 18 14
DR<–PC+off9
MAR<–B+off6 MAR<–B+off6
set CC

2 26 31 3 To 18
To 18
MAR<–PC+off9 MAR<–MDR MAR<–MDR MAR<–PC+off9

25 23 NOTES
MDR<–M[MAR] MDR<–SR B+off6 : Base + SEXT[offset6]
PC+off9 : PC + SEXT{offset9]
R R
16 PC+off11 : PC + SEXT[offset11]
27
DR<–MDR
M[MAR]<–MDR
set CC *OP2 may be SR2 or SEXT[imm5]
R R
To 18 To 18
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
+
ADD 0001 DR SR1 0 00 SR2

+
ADD 0001 DR SR1 1 imm5

+
AND 0101 DR SR1 0 00 SR2

+
AND 0101 DR SR1 1 imm5

BR 0000 n z p PCoffset9

JMP 1100 000 BaseR 000000

JSR 0100 1 PCoffset11

JSRR 0100 0 00 BaseR 000000

+
LD 0010 DR PCoffset9

+
LDI 1010 DR PCoffset9

+
LDR 0110 DR BaseR offset6

+
LEA 1110 DR PCoffset9

+
NOT 1001 DR SR 111111

RET 1100 000 111 000000

RTI 1000 000000000000

ST 0011 SR PCoffset9

STI 1011 SR PCoffset9

STR 0111 SR BaseR offset6

TRAP 1111 0000 trapvect8

reserved 1101

Anda mungkin juga menyukai