retn是什么意思?

justin_0009 2008-10-13 08:52:20
请教一下。最好给个例子。谢谢
...全文
2748 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gqhyz 2012-10-19
  • 打赏
  • 举报
回复
在16-bit Windows下 把代码分成data.code等段的内存模式不同
而Win32只有一种内存模式, 即FLAT模式, 没有64K的段大小限制
所有的Win32的应用程序运行在一个连续,平坦,巨大的4GB空间中

如果你运行在实模式下,那么ret需要考虑段间,还是段内的跳转
如果是在32位保护模式下.整个段空间为2的32次方,也就是4GB
不存在段间跳转.

retn 0x ;就足以满足要求了
youh2009 2009-10-17
  • 打赏
  • 举报
回复
支持cnzdgs的说法。
cnzdgs 2008-10-13
  • 打赏
  • 举报
回复
RETN是段内调用返回;RETF是段间调用返回。两者差别是段间返回要在堆栈中弹出cs。
zhizhi_2008 2008-10-13
  • 打赏
  • 举报
回复
应该是RET N吧?
就是子程序返回,然后把堆栈的N个字节弹出来。
其实就是执行ret后,将n加入sp中,实际上是从堆栈中弹出n个字节的数据,以冲掉在call指令前压入堆栈的参数。
相当于这样:
ret
add sp,n
BAYNPU 2008-10-13
  • 打赏
  • 举报
回复
ret i16:有参数段内返回:IP<--SS:[SP],SP<--SP+2
ret i16:有参数段间返回:IP<--SS:[SP],SP<--SP+2
CS<--SS:[SP],SP<--SP+2,SP+I16
主程序:
MOV AL,0FH
CALL ABC
...
ABC: ABC AND AL,OFH
OR AL,30H
CMP AL,39H
JBE ABC
ADD AL,7
ABC RET
尽管段内返回和段间返回具有相同的汇编助记符,但汇编程序能自动产生不同的指令代码,也可以分别采用RETN和RETF表示段内和段间返回。

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧