注册 登录
编程论坛 汇编论坛

retn 8是什么意思?

ioriliao 发布于 2010-09-17 08:29, 13838 次点击
push 0
push 0
call func
xor eax,eax
retn 8
retn 8是什么意思?谢谢!
2 回复
#2
zklhp2010-09-17 09:03
返回指令(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
 ;远返回指令
RET 6
 ;子程序返回后,(SP)←(SP) + 6
#3
ioriliao2010-09-17 13:28
谢谢版主。
1