永发信息网

关于CALL调用的返回

答案:2  悬赏:60  手机版
解决时间 2021-03-22 03:54
  • 提问者网友:活着好累
  • 2021-03-21 18:01
当使用CALL调用函数返回时,是如何得知是长跳转返回还是短跳转返回?这涉及到栈的不同操作,请大侠赐教!

在执行RET指令是CPU如何得知该调用是长短调用,有什么标记来记录吗?
------------------------------------------------------
意思是说同样是指令RET,汇编程序会转化为不同的机器指令?
最佳答案
  • 五星知识达人网友:有你哪都是故乡
  • 2021-03-21 19:29
以Intel的CPU为例, RET指令远调用、近调用返回对应的操作码是不一样的
C3、C2 iw是近调用返回
CB、CA iw是远调用返回

同样是指令RET,汇编程序会转化为不同的机器指令,有些汇编程序支持在写代码时用retn表示近调用返回,retf表示远调用返回
全部回答
  • 1楼网友:过活
  • 2021-03-21 19:43
是长跳转返回还是近跳转返回取决于是远调用还是近调用。远调用也叫段间调用,分为段间直接调用和段间间接调用,也就是说调用过程与被调用过程不在同一个代码段内。近调用也叫段内调用,分为段内直接调用和段内间接调用,也就是说调用过程与被调用过程在同一个代码段内。远调用有时会用FAR,近调用有时会用NEAR,但如果省略FAR或NEAR时,应该根据调用过程与被调用过程是否在同一代码段内来区分。 如果是段间调用则为长跳转返回,如果是段内调用则是近跳转返回。 无论是哪种返回都由返回指令RET自动实现的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯