gpt4 book ai didi

assembly - 获取 CALL 的微操作

转载 作者:行者123 更新时间:2023-12-03 04:30:04 26 4
gpt4 key购买 nike

我试图了解如何在微操作中编写获取周期,以供 CPU 获取 32 位的 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

关于assembly - 获取 CALL 的微操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14823243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com