2013-02-12 46 views
3

我想了解如何在微操作中爲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

回答

0

我假設處理內存的小端架構。我還假設其中一個寄存器被稱爲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