Есть ли предел того, насколько далеко может прыгнуть JE? - PullRequest
2 голосов
/ 29 сентября 2010

Я где-то слышал, что инструкции условного перехода в наборе команд x86 были ограничены 256 байтами.(Другими словами, переход не может идти дальше 256 байт.)

Это правда?Я писал логику с использованием инструкций JMP, чтобы обойти это.Это необходимо?

Ответы [ 2 ]

8 голосов
/ 29 сентября 2010

IA32 поддерживает 8-битные, 16-битные и 32-битные условные относительные переходы.x86_64 поддерживает 8-битные и 32-битные условные относительные переходы.См. Руководства разработчика программного обеспечения Intel .

Ваш ассемблер (или компоновщик, если речь идет о перемещениях) должен предупредить вас, если ваша метка находится вне диапазона перехода, в любом случае.


PS: В реальном режиме (и в режиме виртуального 8086) условные переходы ограничены смещениями +/- 127.

0 голосов
/ 29 сентября 2010

Одно небольшое дополнение к другому ответу здесь (что в противном случае правильно):

Ваш прыжок никогда не будет "вне диапазона".Конкретное кодирование и, следовательно, обманывают использование 32-битного, 16-битного или 8-битного смещения для любого относительного перехода, будет выполнено вашим ассемблером.Обычно это называется «подбор инструкций».В любом случае, при любом 32-битном значении «eip» всегда есть 32-битное смещение со знаком, которое при добавлении к «eip» будет равно любому произвольному 32-битному адресу.

Это означает, что вы можете перейти из любого местав программе, куда угодно, одним прыжком.

8-битные и 16-битные формы "jump / cc" просто позволяют вам делать это с меньшим количеством байтов в потоке команд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...