首页 > 解决方案 > 为什么 MIPS 中没有 RET 指令,而 x86 有 RET 指令?

问题描述

为什么 MIPS 子例程返回 byjr而 x86 返回 using ret

为什么MIPS中没有任何ret指令?

或者,为什么 x86 不使用jr

标签: x86returnmipssubroutine

解决方案


在 x86 中,调用指令将返回地址放入堆栈的内存中。在 MIPS 中,调用指令 ( jal) 将返回地址放入寄存器。

在 x86 中, ret 指令从堆栈中删除返回地址并跳转到它。MIPS 哲学不会将单独的步骤组合成一条指令。这大大简化了指令集。从堆栈中删除一个值并执行一个分支是单独的操作,需要单独的指令。在调用/返回的特殊情况下,它还具有在叶函数中根本不需要将返回地址写入内存的优点。

X86 具有 jr 指令的等效项,jmp r/m32其目标指定为寄存器。该指令通常不用于函数返回,因为需要一条单独的指令将返回地址从堆栈弹出到寄存器中(但在特殊情况下,我已经编写了完全这样做的代码)。


推荐阅读