为什么MIPS中没有RET指令,而x86有RET指令?

Why isn't there any RET instruction in MIPS, while x86 has a RET instruction?

为什么 MIPS 子程序 return 通过 jr 而 x86 return 通过使用 ret

为什么 MIPS 中没有 ret 指令?

或者,为什么 x86 不使用 jr

在x86中,call指令将内存中的return地址放到栈上。在 MIPS 中,调用指令 (jal) 将 return 地址放入寄存器。

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

X86 有一个等同于 jr 指令的指令,jmp r/m32,目标指定为一个寄存器。该指令通常不用于函数 return,因为这样就需要一条单独的指令将 return 地址从堆栈弹出到寄存器中(但在特殊情况下,我编写的代码正是这样做的).