En este ejercicio pide implementar una instrucción LOAD_OPERATE_SAVE (para la etapa de execute me aclararon) que realice la cuenta
Memoria[SP] := 2*(Memoria[SP] + 1) - 1.
Yo hice (MIC-1 le lleva dos períodos de reloj leer o escribir en memoria):
MAR := SP; RD
RD; AC := MBR
AC := lshift(AC + 1)
MBR := AC - 1; WR
MAR := SP; WR
Mi duda es si en RD; AC := MBR el RD termina de leer antes que se guarde en AC lo del MBR. No pasa que al ejecutarse en la misma microinstrucción guarda lo que estaba antes de terminar el RD?
Lo mismo en
MBR := AC - 1; WR
MAR := SP; WR
Al empezar el WR antes de asignar al MAR donde tiene que grabar, cómo empieza a grabar? o sea el primer período del WR no le falta información para hacer el WR (o sea DÓNDE guardar)?
Si lo hiciera al revés:
MAR := SP; WR
MBR := AC - 1; WR
también me queda la duda de si en el primer WR no tiene información sobre QUÉ guardar.
Gracias desde ya!