JE可以跳多远?

时间:2010-09-29 04:32:53

标签: assembly x86

我听说x86指令集中的条件跳转指令限制为256个字节。 (换句话说,跳转不能超过256个字节。)

这是真的吗?我一直在编写涉及JMP指令的逻辑来解决这个问题。有必要吗?

2 个答案:

答案 0 :(得分:8)

IA32支持8位,16位和32位条件相对跳转。 x86_64支持8位和32位条件相对跳转。请参阅Intel's Software Developer's Manuals

你的汇编程序(或链接程序,如果涉及重定位)应该警告你,无论如何你的标签超出了跳跃的范围。


PS:在实模式(和虚拟8086模式)下,条件跳转 仅限于+/- 127的偏移。

答案 1 :(得分:0)

这里另一个答案的一个小附录(否则是正确的):

你的跳跃永远不会“超出范围”。对于任何相对跳转使用32位,16位或8位偏移的特定编码以及因此对于任何相对跳转的偏差将由汇编程序进行。这通常被称为“指令选择”。在任何情况下,给定“eip”的任何32位值总是有一些32位有符号位移,当加到“eip”时将等于任意32位地址。

这意味着您可以通过单次跳转从程序中的任何位置跳转到其他任何位置。

8位和16位形式的“jump / cc”只允许您在指令流中使用更少的字节。