为CALL获取微操作
问题描述:
我想了解如何在微操作中为32位CALL指令写入获取周期将由CPU获取。为CALL获取微操作
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位宽各?
答
我假设处理内存的小端架构。我还假设其中一个寄存器被称为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 address
+1很高兴看到关于微码的问题。 – 2013-02-12 00:13:08
这似乎是一个硬件实现问题,而不是汇编问题,但如果你的指令是32位而你的提取是8位的,你将需要每个指令4个提取... – 2013-02-12 00:13:17