В x86 ассемблере , то инструкция выполняет безусловный переход. Такая инструкция передает поток выполнения , изменяя регистр указателя инструкции . Есть несколько разных кодов операций, которые выполняют переход; в зависимости от того, находится ли процессор в реальном режиме или в защищенном режиме , и используется инструкция переопределения, инструкции могут принимать 16-битные , 32-битные или сегментные указатели смещения . [1]JMP
Есть много различных форм переходов: относительные, условные , абсолютные и косвенные по регистру .
Следующие примеры иллюстрируют:
- относительный переход с 16-битным указателем;
- длинный переход (межсегментный), относительный переход с 32-битным указателем;
- и косвенный регистр абсолютного перехода с использованием регистра EAX .
(Обратите внимание, что хотя первый и второй переходы являются относительными, обычно вместо относительного смещения, закодированного в коде операции, отображается адрес назначения.)
Пример 1: загрузить IP с новым значением 0x89AB
, затем загрузить CS с помощью 0xACDC
и IP с помощью 0x5578
.
JMP 0x89AB JMP 0xACDC : 0x5578
Пример 2: загрузить EIP со значением 0x56789AB1
, только в защищенном или нереальном режиме .
JMP 0x56789AB1
Пример третий: переход к значению, хранящемуся в регистре EAX, только в защищенном режиме.
JMP EAX
Рекомендации
- ^ «Руководство разработчика программного обеспечения для архитектуры Intel, Том 2: Справочное руководство по набору инструкций (6,5 МБ)» (PDF) . Архивировано из оригинального (PDF) 19 февраля 2009 года . Проверено 3 ноября 2009 .