为什么MIPS子例程由jr
返回,而x86通过使用ret
返回?
为什么MIPS中没有任何ret
指令?
或者,为什么x86不使用jr
?
答案 0 :(得分:3)
在x86中,调用指令将返回地址放入堆栈的内存中。在MIPS中,调用指令(jal
)将返回地址放入寄存器中。
在x86中,ret指令从堆栈中删除返回地址并跳转到该地址。 MIPS的原理不会将单独的步骤组合成一条指令。这大大简化了指令集。从堆栈中删除值并执行分支是单独的操作,需要单独的指令。在特定的调用/返回情况下,它还具有以下优点:在叶子函数中,根本不需要将返回地址写入内存。
X86与jr指令jmp r/m32
等效,其目标指定为寄存器。该指令通常不用于函数返回,因为这时需要一条单独的指令才能将返回地址从堆栈弹出到寄存器中(但我编写的代码在特殊情况下可以做到这一点)。