【问题标题】:Does $ra returns the address of current instruction or the next instruction?$ra 是返回当前指令的地址还是下一条指令的地址?
【发布时间】:2011-08-21 09:46:36
【问题描述】:

我对$ra返回地址的概念很困惑。它返回的是当前指令正在执行的地址还是下一个要执行的指令的地址?解释请使用以下代码,

  1. 考虑一个调用三个函数 func_A 的代码片段, func_B 和 func_C。指令 1 位于地址 1996。 当三个函数中的每一个都被加载到寄存器 $ra 中时 叫什么?
Instruction 1
Instruction 2
jal func_A
Instruction 3
jal func_B
Instruction 4
jal func_C
Instruction 5

提前致谢。

【问题讨论】:

  • 我不记得 mips 拱门,但返回地址是接下来要执行的指令是合乎逻辑的,否则你将陷入无限循环

标签: mips computer-architecture instruction-set


【解决方案1】:

下一条指令存放在$ra中

所以,调用 func_A 时,$ra = 2008;调用 func_B 时,$ra = 2016;调用 func_C 时,$ra = 2024。

这是合乎逻辑的,因为你通过jr $ra从子程序返回,从而跳转到子程序调用之后的指令。

【讨论】:

  • 您忘记了每个 JAL 之后的 MIPS 分支延迟槽。指令 3 在 func_A 开始之前执行,因此 $ra 将包含“jal func_B”的地址,即 func_A 开始处的 2012。类似地,$ra 在调用 $func_B 时包含 2020,在调用 func_C 时包含 2028。
猜你喜欢
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多