汇编语⾔教程-返回指令(RET)
汇编语⾔教程-返回指令(RET)
当⼦程序执⾏完时,需要返回到调⽤它的程序之中。为实现此功能,指令系统提供了⼀条专⽤的返回指令。其格式如下:
RET/RETN/RETF [Imm]
⼦程序的返回在功能上是⼦程序调⽤的逆操作。为了与⼦程序的远、近调⽤相对应,⼦程序的返回也分:远返回和近返回。返回指令在堆栈操作⽅⾯是调⽤指令的逆过程(如图7.3所⽰)。其具体规定如下:
、在近类型的⼦程序中,返回指令RET是近返回,其功能是把栈顶之值弹出到指令指针寄存器IP中,SP会被加2(如图7.3所⽰);
、在远类型的⼦程序中,返回指令RET是远返回,其功能是:先弹出栈顶之值到IP中,再弹出栈顶之值到CS之中,SP总共会被加4(如图7.4所⽰)。
图7.3近返回指令的出栈操作⽰意图
图7.4远返回指令的出栈操作⽰意图
汇编语言结束指令如果返回指令后⾯带有⽴即数(其值通常为偶数),则表⽰在得到返回地址之后,SP还要增加的偏移量,它不是类似于⾼级语⾔中⼦程序的返回值(如图7.5所⽰)。
图7.5带⽴即数的返回指令的出栈操作⽰意图
在MASM 5.0及其以后版本中,可⽤指令RETN或RETF来显式地告诉汇编程序是本⼦程序的返回是近返回,还是远返回。
例如:
RET;可能是近返回,也可能是远返回
RETN;近返回指令
RETF;远返回指令
RET6;⼦程序返回后,(SP)←(SP) + 6
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论