Ejercicio 1 :
A)
ADD $t0,
$t1, $t2
|
||||||
Nmemónico
|
0
|
RS=$t1
|
RT=$t2
|
RD=$t0
|
0
|
0x20
|
Binario
|
000000
|
01001
|
01010
|
01000
|
00000
|
100000
|
Hexadecimal
|
0x12A4020
|
S1
|
MAR ß PC
|
T4, C1
|
S2
|
MBR ß MP (MAR)
PC ß PC+4
|
Td,
L, C2
C4
|
S3
|
RI ß MBR
|
T3, C6
|
S4
|
Decodificación
|
|
S5
|
R8
ß R9+R10
|
RA=01001,
RB=01010, RC=01000, MA=0, MB=0, OP=00001, T5,SC
|
S6
|
Comprobar
interrupción
|
B)
ADDI
$s0,$s1, 0x0011
|
||||
Nmemónico
|
8
|
RS=$s1
|
RT=$s0
|
Inmediato
|
Binario
|
001000
|
10001
|
10000
|
0000000000010001
|
Hexadecimal
|
0x22300011
|
S1
|
MAR ß PC
|
T4, C1
|
S2
|
MBR ß MP (MAR)
PC ß
PC+4
|
Td,
L, C2
C4
|
S3
|
RI ß MBR
|
T3, C6
|
S4
|
Decodificación
|
|
S5
|
RT2 ß RI
|
T8, C10
|
S6
|
R10 ßR19+RT2
|
RA=10001($s1),
OP=00001, MA=0, MB=1, T5, RC= 10000($s0), SC
|
S7
|
Comprobar interrupción.
|
C)
ORI $t0,
$t2, 0x00A1
|
||||
Nmemónico
|
0xD
|
RS=$t2
|
RT=$t0
|
Inmediato
|
Binario
|
001101
|
01010
|
01000
|
0000000010100001
|
Hexadecimal
|
0x354800A1
|
S1
|
MAR ß PC
|
T4, C1
|
S2
|
MBR ß MP (MAR)
PC ß
PC+4
|
Td,
L, C2
C4
|
S3
|
RI ß MBR
|
T3, C6
|
S4
|
Decodificación
|
|
S5
|
RT2
ß RI
|
T8,
C10
|
S6
|
R8
ß R10 OR Rt2
|
RA=01010,
MA=0, MB=1,OP=00003, T5, RC=01000, SC
|
S7
|
Comprobar interrupción
|
D).
SLL $t0, $t0, 0x0002
|
||||||
Nmemónico
|
0
|
Rs=0
|
Rt=$t0=8
|
Rd=$t0=8
|
Desp=2
|
0
|
Binario
|
000000
|
00000
|
01000
|
01000
|
00010
|
000000
|
Hexadecimal
|
0x84080
|
S1
|
MAR ß PC
|
T4, C1
|
S2
|
MBR ß MP (MAR)
PC ß
PC+4
|
Td,
L, C2
C4
|
S3
|
RI ß MBR
|
T3, C6
|
S4
|
Decodificación
|
|
S5
|
RT2
ßRI
|
T8,
C10
|
S6
|
R8
ßR8 SLL RT2
|
RA=01000,
MA=0, MB=1, OP=00008, T5, RC=01000, SC
|
S7
|
Comprobar interrupción.
|
E)
SLR $t1, $t0,
0x0002
|
||||||
Nmemónico
|
0
|
Rs=0
|
Rt=$t0=8
|
Rd=$t1=9
|
Desp=2
|
0
|
Binario
|
000000
|
00000
|
01000
|
01001
|
00010
|
000000
|
Hexadecimal
|
0x84880
|
S1
|
MAR ß PC
|
T4, C1
|
S2
|
MBR ß MP (MAR)
PC ß
PC+4
|
Td,
L, C2
C4
|
S3
|
RI ß MBR
|
T3, C6
|
S4
|
Decodificación
|
|
S5
|
RT2
ß RI
|
T8,
C10
|
S6
|
R9
ß R8 SLR RT2
|
RA=01000,
MA=0, MB=1, OP=00005, T5, RC=01001, SC
|
S7
|
Comprobar interrupción.
|
F)
LUI $s0,0x0011
|
||||
Nmemónico
|
0xF
|
0
|
Rt=$s0=16
|
Imm=0x0011
|
Binario
|
010000
|
00000
|
10000
|
000000000010001
|
Hexadecimal
|
0x20080011
|
S1
|
MAR ß PC
|
T4, C1
|
S2
|
MBR ß MP (MAR)
PC ß
PC+4
|
Td,
L, C2
C4
|
S3
|
RI ß MBR
|
T3, C6
|
S4
|
Decodificación
|
|
S5
|
RT2
ß RI
|
T8,
C10
|
S6
|
R16
ß R16
|
RA=10000, MA=0, MB=1,
OP=00006, T5, RC=10000, SC
|
S7
|
Comprobar interrupción.
|
G)
SW $t4, 0x0111
|
||||
Nmemónico
|
0x2b
|
Rs=0
|
Rt=$t4=12
|
Imm=0x0011
|
Binario
|
101011
|
00000
|
01100
|
0000000000010001
|
Hexadecimal
|
0xAC0C0011
|
S1
|
MAR ß PC
|
T4, C1
|
S2
|
MBR ß MP (MAR)
PC ß
PC+4
|
Td,
L, C2
C4
|
S3
|
RI ß MBR
|
T3, C6
|
S4
|
Decodificación
|
|
S5
|
MAR
ß RI
|
T8,
C10
|
S6
|
MBR
ß R10
|
RA=01010,
T1, C3
|
S7
|
MP ß MBR
|
Ta, Td, E
|
S8
|
Comprobar
interrupción
|
H)
SLT $t1, $t2,
$t0
|
||||||
Nmemónico
|
0
|
Rs=$t2=10
|
Rt=$t0=8
|
Rd=$t1=9
|
0
|
0x2A
|
Binario
|
000000
|
01010
|
01000
|
01001
|
00000
|
101010
|
Hexadecimal
|
0x148482A
|
S1
|
MAR ß PC
|
T4, C1
|
S2
|
MBR ß MP (MAR)
PC ß
PC+4
|
Td,
L, C2
C4
|
S3
|
RI ß MBR
|
T3, C6
|
S4
|
Decodificación
|
|
S5
|
RT3
ß R10-R8
RE
ß ALU
|
RA=01010,RB=01000,MA=0,MB=0,
OP=00001, C11
C8
|
S6
|
RT1
ß RE
|
T7,
C9
|
S7
|
R9 ß NOT
|
RC=01001, MA=1, Op=00110, T5, SC
|
S8
|
Comprobar
interrupción.
|
I)
J 0x000001A
|
||
Nmemónico
|
2
|
Dirección
|
Binario
|
000010
|
00000000000000000000011010
|
Hexadecimal
|
0x800001A
|
S1
|
MAR ß PC
|
T4, C1
|
S2
|
MBR ß MP (MAR)
PC ß
PC+4
|
Td,
L, C2
C4
|
S3
|
RI ß MBR
|
T3, C6
|
S4
|
Decodificación
|
|
S5
|
PC
ß RI
|
T8,
C5
|
S6
|
Comprobar
interrupción.
|
J)
JR $S0
|
||||
Nmemónico
|
0
|
Rs=$s0=16
|
0
|
8
|
Binario
|
000000
|
10000
|
000000000000000
|
001000
|
Hexadecimal
|
0x2000008
|
S1
|
MAR ß PC
|
T4, C1
|
S2
|
MBR ß MP (MAR)
PC ß
PC+4
|
Td,
L, C2
C4
|
S3
|
RI ß MBR
|
T3, C6
|
S4
|
Decodificación
|
|
S5
|
PC
ß R16
|
RA=10000,
T1, C5
|
S6
|
Comprobar
interrupción
|
SIMULACIÓN LOGISIM.
Para comprobar las
operaciones realizadas previamente, debemos meter los resultados en la memoria
del circuito en hexadecimal. Esto es fácil de hacer, simplemente clickamos con
el botón derecho sobre la memoria, pinchamos en “Editar contenidos…” y
sobreescribimos los 10 primeros valores, saltando el primero, y cerramos la
ventana. Ya podemos simular las
instrucciones correctamente.
instrucciones correctamente.
Simularemos la primera
instrucción, ADD $t0, $t1, $t2:
En el primer ciclo, abrimos
el triestado T4, pero como en este caso es la primera instrucción, el contador
se mantiene a 0. Con esto conocemos la dirección de memoria en la que está la
instrucción. Activamos la señal C1 del MAR para almacenar la dirección de la
instrucción con la que estamos trabajando.
instrucción con la que estamos trabajando.
En el siguiente ciclo,
abrimos el triestado TD, activamos el modo lectura (L) y con el pin
seleccionamos la posición en memoria que contiene la instrucción, para luego
activar C2 y guardar el contenido en MBR. A la vez, hay que activar C4 para
sumar 4 bytes al contenido del contador de programa, para que se puedan
simular todas las instrucciones seguidas de esta forma.
En el último ciclo, lo
único necesario es mover el contenido de MBR a RI para que la unidad pueda
decodificar la instrucción. Para esto, activamos el triestado T3 y lo guardamos
activando C6.
Ahora debemos introducir
los valores que queramos en $t1 y St2 para operarlos. Seleccionamos $t1 y $t2
en los registros RA y RB, y con el 0 se realizará la operación. Ahora hay que
almacenar el resultado en $t0. Para ello, activamos T5 y seleccionamos en RC el
registro $t0. Finalmente, activamos a la vez SC y C8 para almacenar en el
registro y los indicadores de la operación.
FAQ´s
Realizado por: Manuel Pedrajas Ochoa
Manuel Venega Bermúdez
FAQ´s
1. ¿Cómo debemos codificar las
instrucciones a la hora de hacer el trabajo?
Pues debemos
pasarlas primero a binario y luego a hexadecimal, teniendo en cuenta que cada
instrucción tiene una forma o fórmula de codificarse ( puede verse en los
apuntes del tema 2 – Programación en ensamblador ).
2. ¿Qué tenemos que tener en cuenta
para que funcione el simulador?
Para que se inicie el programa la memoria debe estar activada: Sel =1,
en modo lectura L=1 y el triestado que conecta el bus de direcciones con el registro MAR abierto TD=1.
Para reiniciar todo el sistema
se cuenta con una entrada de RESET general.
3. ¿De qué se encarga la A.L.U?
Encargada de
realizar las operaciones aritméticas, lógicas y de desplazamiento.
En la ALU
del trabajo se puede seleccionar la operación introduciendo los siguientes
códigos:
00001 Suma
00002 Resta
00003 OR
00004 AND
00005 Desplazamiento a la derecha de 1, 2, 3, 4 bits
00006 Desplazamiento a la izquierda de 1, 2, 3, 4 bits
00007 NOT
00008 XOR
4. No funciona el simulador, falla el
decodificador.
El parámetro
“Disabled Output” del decodificador junto a los triestados debe estar en
“zero”, aunque a veces venga predeterminado “floating”.
5. ¿Qué debo hacer para resetear el
circuito?
Realizado por: Manuel Pedrajas Ochoa
Manuel Venega Bermúdez
No hay comentarios:
Publicar un comentario