2010-09-29 97 views
2

我聽說x86指令集中的條件跳轉指令限制爲256字節。 (換句話說,跳不能大於256個字節走得更遠。)JE能跳多遠有沒有限制?

這是真的嗎?我一直在編寫涉及JMP指令的邏輯來解決這個問題。有必要嗎?

回答

8

IA32支持8位,16位和32位的條件相對跳躍。 x86_64支持8位和32位條件相對跳轉。見Intel's Software Developer's Manuals

你的彙編(或鏈接,如果搬遷涉及)應該警告你,如果你的標籤是出了跳躍的範圍,無論如何。


PS:在實模式(和虛擬8086模式),有條件跳轉限制爲+/- 127偏移。

+0

啊哈!我知道我聽說過有條件的跳轉。必須來自實模式裝配書。 – 2010-09-29 21:36:04

+0

感謝您的回答,但我正在編寫的代碼不會以實模式運行。 – 2010-09-29 21:36:30

0

一個小編這裏的其他答案(這是正確的,否則):

你跳將永遠是「超出範圍」。特定的編碼,以及因此使用32位,16位或8位偏移進行任何相對跳轉的情況,將由彙編程序進行。這通常被稱爲「指令選擇」。在任何情況下,給定任何32位的「eip」值總是會有一些32位有符號位移,當添加到「eip」時將等於任意32位地址。

這意味着你可以從任何地方在程序跳轉到其他地方,有一個跳躍。

的8位和「跳/ CC」的16種形式只是讓你做到這一點與指令流中的字節數更少。

+5

請注意,x86_64不一定是這種情況,因爲沒有64位的相對跳轉。不過,你將不得不做很奇怪的事情來遇到這種情況。 (在真實模式中情況並非如此,其中條件跳躍*被限制爲+/- 127的偏移量)。 – caf 2010-09-29 05:52:00