我无法理解指令jal在 MIPS 处理器中的工作方式。我的两个问题是:
a) “jal”之后存储在R31中的值是多少: PC+4或PC+8?
b)如果真的是PC+8 ,那么PC+4处的指令会发生什么?它是在跳转之前执行还是从不执行?
在帕特森和轩尼诗(第四版),第 113 页:
“跳转和链接指令:跳转到并寻址并同时将以下指令的地址保存在寄存器中的指令(MIPS中的$ra )”
“程序计数器(PC):包含正在执行的程序中指令地址的寄存器”
读完这两条语句后,$ra中保存的值应该是(PC+4)。
但是在随书附带的MIPS参考资料(绿卡)中,jal指令的算法是这样定义的:
“Jump and Link : jal : J : R[31]=PC+8;PC=JumpAddr”
该网站还声明“它实际上是PC+8 ”,但奇怪的是,之后它说由于流水线是一个高级主题,“我们假设返回地址是PC+4 ”。
我来自 8086 程序集,所以我知道返回地址和返回地址后面的地址之间存在很大差异,因为如果我只是假设某些不正确的东西,程序将无法运行。谢谢。