汇编 CALL 和 RET 堆栈

Assembly CALL and RET stack

我有question.When我知道

call <address>

等同于

push rip  
jmp <address>

我也知道

ret

等同于

pop rip
jmp <rip>

但是如果我们跳到 rip 为什么我们不再次开始这个循环因为我们在跳转之前按下 rip 并且 rip 在跳转时指定?你能解释一下我们如何在代码中传递这个跳转吗

不同的处理器有不同的处理方式。在某些情况下,call 在调用后推送指令的地址。在其他情况下,ret 在跳转之前将调用指令的长度添加到 return 地址。

第一种方法更灵活,因为它可以在call中使用不同指令长度的各种寻址方式。在处理 call 时,指令解码器也可能已经知道下一条指令的位置。