标号的类型是near还是far有什么区别,作用是什么?

汇编 定义过程时,near和far有什么作用?
答:这个主要和两个指令有关call ret
call 一个near过程,只把偏移地址压入堆栈,过程返回时用retn返回
call一个far过程,把偏移地址和段地址入栈,过程返回时用retf返回
在过程中的ret指令根据near和far的不同,分别编译成retn和 retf
retn和retf的机器码是不同的,你也可以不定义过程,直接用retn和retf

如果你的子程序和主程序在同一个代码段,则使用near,调用发生后,主程序堆栈中只压入ip值;
如果你的子程序和主程序不在一个代码段,则使用far,调用发生后,主程序堆栈中将压入cs、ip值;
2.near定义的标号表示段内近跳转,近调用的地址
far定义的标号表示段间远跳转,远调用的地址
near的时候,地址是16位的,far的时候是32位的(段地址+偏移地址)

发布了149 篇原创文章 · 获赞 22 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/deniece1/article/details/103214067