天天看點

标号的類型是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位的(段位址+偏移位址)

繼續閱讀