x86 - 为什么 MIPS 中没有 RET 指令,而 x86 有 RET 指令?
问题描述
为什么 MIPS 子例程返回 byjr
而 x86 返回 using ret
?
为什么MIPS中没有任何ret
指令?
或者,为什么 x86 不使用jr
?
解决方案
在 x86 中,调用指令将返回地址放入堆栈的内存中。在 MIPS 中,调用指令 ( jal
) 将返回地址放入寄存器。
在 x86 中, ret 指令从堆栈中删除返回地址并跳转到它。MIPS 哲学不会将单独的步骤组合成一条指令。这大大简化了指令集。从堆栈中删除一个值并执行一个分支是单独的操作,需要单独的指令。在调用/返回的特殊情况下,它还具有在叶函数中根本不需要将返回地址写入内存的优点。
X86 具有 jr 指令的等效项,jmp r/m32
其目标指定为寄存器。该指令通常不用于函数返回,因为需要一条单独的指令将返回地址从堆栈弹出到寄存器中(但在特殊情况下,我已经编写了完全这样做的代码)。
推荐阅读
- python - 如何将 Mlib 库添加到 Spark?
- orientdb - Orientdb SELECT 和带有聚合的子查询
- if-statement - if 语句条件嵌入列中
- python - Heroku 上的 SMTPAuthenticationError
- python - 在通过 run_module() 运行的模块中创建的变量不会显示在 Spyder 的变量资源管理器中
- go - 为什么运行 mux API 测试时响应体为空?
- r - 从R中只有两个字符串的列中删除字符串
- postgresql - 添加派生数据列时出现问题
- flutter - 颤振弹出直到到达模态底部表
- java - 请帮我从firebase添加分享壁纸代码