JE可以跳多远?

问题描述 投票:2回答:2

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

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

assembly x86
2个回答
8
投票

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

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


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


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.