Ejercicio 2 - Práctico 7.

Ejercicio 2 - Práctico 7.

de Miguel Orlando Da Silva Maciel -
Número de respuestas: 6
Dado la secuencia de bits A = 11001000000100011001000000001000 me quedó la instrucción en MAL:

AC := mbr & 0x00ff; if z then goto 8

Y para B = 00110000000011100001000000001110 la instrucción en MAL es:

E := AC; if n then goto 14

¿Es así? Por otro lado, en el caso de B el vigésimo bit es 0 y eso deshabilita el BUS C para que se guarde un valor en el registro en que este BUS está conectado (en el caso del ejercicio es el registro E porque los bits 19, 18, 17 y 16 son 1,1,1, y 0, respectivamente).

Así que, ¿está bien lo que digo? ¿Dónde estaría equvicándome?

Saludos y gracias.


En respuesta a Miguel Orlando Da Silva Maciel

Re: Ejercicio 2 - Práctico 7.

de Gustavo Brown -

Para la primer microsinstrucción: 

1|10|01|00|0|0|0|0|1|0001|1001|0000|00001000
AMux=1 ==> mux toma dato de MBR
Cond=10 ==> salta si Z=1
ALU=01 ==> operacion de ALU es and bit a bit, como AMux=1 es band(MBR, Reg[B])
SH=00 ==> no hace shift
MBR,MAR,RD,WR = 0 ==> no se carga MAR ni MBR y no hay acceso por el bus de datos
ENC=1 ==> se carga resultado de la operacion en Reg[C]
C=1 ==> Reg[C] = AC 
B=9 ==> Reg[B] = SMask
A=0 ==> Reg[A] = PC (no importa porque AMux=1)
ADDR=8 ==> salto es hacia direccion 8
Luego de "decodificar" la microinstrucción podemos escribirla en MAL:
AC := band(MBR, SMask); if z then goto 8

Para la segunda microinstrucción

0|01|10|00|0|0|0|0|0|1110|0001|0000|00001110

AMux=0 ==> mux toma dato de Reg[A]
Cond=01 ==> salta si N=1
ALU=10 ==> operacion de ALU es Reg[A]
SH=00 ==> no hace shift
MBR,MAR,RD,WR = 0 ==> no se carga MAR ni MBR y no hay acceso por el bus de datos
ENC=0 ==> no se carga resultado de la operacion en unidad de registros
C=14 ==> Reg[C] = E pero no importa porque ENC=0
B=1 ==> Reg[B] = AC pero no importa porque ALU=10 y no se carga MAR
A=0 ==> Reg[A] = PC 
ADDR=14 ==> salto es hacia direccion 14
Luego de "decodificar" la microinstrucción podemos escribirla en MAL:
ALU := PC; if n then goto 14

La asignación a ALU es para indicar que no se guarda el resultado en la unidad de registros.

Saludos,

  Gustavo

En respuesta a Gustavo Brown

Re: Ejercicio 2 - Práctico 7.

de Hugo Sebastian Rodriguez Reyes -
Clarisimo, la unica duda que me quedo es porque se pone band en vez de and?

Es para aclarar que es un and bit a bit o por otra cosa?

En respuesta a Hugo Sebastian Rodriguez Reyes

Re: Ejercicio 2 - Práctico 7.

de Gustavo Brown -

El nombre band lo puso Tannenbaum cuando diseño la MIC-1, viene de "binary and" es decir and bit a bit en contraposición del and lógico.

Igualmente la Mic-1 no tiene and lógico así que no hay ambigüedad.

Saludos,
  Gustavo

En respuesta a Gustavo Brown

Re: Ejercicio 2 - Práctico 7.

de Martin Pacheco -

Como me doy cuenta que la asignacion es al "registro virtual" de la ALU?

Es porque ENC, MBR y MAR estan en 0? 

En respuesta a Martin Pacheco

Re: Ejercicio 2 - Práctico 7.

de Gustavo Brown -

La asignación de la operación de la alu es al registro virutual "ALU" cuando el resultado de ese camino de datos no se almacena en ningún otro lado.

Si te fijas en el diagrama de bloques, vas a ver que a la salida de la ALU se pasa directo por el Shifter y luego va a MBR y al bus de datos C.

Por lo tanto, si MBR y ENC valen 0, el resultado no se almacena y por lo tanto se usa el registro virtual ALU.

La señal MAR indica si se desea almacenar en el registro asociado (MAR) el dato que pasa por el bus B, por lo que no tiene relación con lo que haga en la ALU.

Saludos,
  Gustavo