为CALL获取微操作

为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位宽各?

+0

+1很高兴看到关于微码的问题。 – 2013-02-12 00:13:08

+1

这似乎是一个硬件实现问题,而不是汇编问题,但如果你的指令是32位而你的提取是8位的,你将需要每个指令4个提取... – 2013-02-12 00:13:17

我假设处理内存的小端架构。我还假设其中一个寄存器被称为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