关于CALL调用的返回

来源:百度知道 编辑:UC知道 时间:2024/04/28 11:52:48
当使用CALL调用函数返回时,是如何得知是长跳转返回还是短跳转返回?这涉及到栈的不同操作,请大侠赐教!
在执行RET指令是CPU如何得知该调用是长短调用,有什么标记来记录吗?
------------------------------------------------------
意思是说同样是指令RET,汇编程序会转化为不同的机器指令?

以Intel的CPU为例, RET指令远调用、近调用返回对应的操作码是不一样的
C3、C2 iw是近调用返回
CB、CA iw是远调用返回

同样是指令RET,汇编程序会转化为不同的机器指令,有些汇编程序支持在写代码时用retn表示近调用返回,retf表示远调用返回

是长跳转返回还是近跳转返回取决于是远调用还是近调用。远调用也叫段间调用,分为段间直接调用和段间间接调用,也就是说调用过程与被调用过程不在同一个代码段内。近调用也叫段内调用,分为段内直接调用和段内间接调用,也就是说调用过程与被调用过程在同一个代码段内。远调用有时会用FAR,近调用有时会用NEAR,但如果省略FAR或NEAR时,应该根据调用过程与被调用过程是否在同一代码段内来区分。
如果是段间调用则为长跳转返回,如果是段内调用则是近跳转返回。
无论是哪种返回都由返回指令RET自动实现的。