我正在尝试理解cpu如何在微操作中写入32位调用指令的获取周期。
MAR is 16 bits wide
MDR is 8 bits wide
PC is 16 bits wide
IR is 16 bits wide
Temp registers are 16 bits wide我的问题源于这样一个事实:指令是32位的,高16位代表操作码,低16位代表我们要跳转到的目标地址。
获取周期是这样的:
MAR <- PC
MDR <- M(MAR)
IR <- MDR opcode
MAR <- MDR address
PC <- PC + 1由于MDR只有8位宽,我们如何调整这个获取周期来考虑整个操作码和地址,每个操作码和地址都是16位宽?
发布于 2013-11-21 22:52:25
我假设使用小的endian架构来处理内存。我还假设其中一个寄存器称为SP,是一个向下增长的堆栈指针。可独立访问PC、TEMP和IR的上下部。
/* FETCH................ */
MAR <- PC
PC <- PC+1
MDR <- M(MAR) ;low 8 bits of opcode
IRlow <- MDR
MAR <- PC
PC <- PC+1
MDR <- M(MAR) ;high 8 bits of opcode
IRhigh <- MDR
/* DECODE AND EXECUTE................ */
if MDR is opcode for CALL...
MAR <- PC
PC <- PC+1
MDR <- M(MAR) ;low 8 bits of destination
TEMPlow <- MDR
MAR <- PC
PC <- PC+1
MDR <- M(MAR) ;high 8 bits of destination
TEMPhigh <- MDR
SP <- SP-1
MAR <- SP
MDR <- PChigh
M(MAR) <- MDR ;store hi part of next instruction in stack
SP <- SP-1
MAR <- SP
MDR <- PClow
M(MAR) <- MDR ;store low part of next instruction in stack
PC <- TEMP ;update PC to jump to the called addresshttps://stackoverflow.com/questions/14823243
复制相似问题