ХАНДЫФАР
Инструкция JMP
Переход к инструкции, указанной в операнде.
JMP rel8 - Короткий переход на относительный адрес rel8.
JMP rel16 - Короткий переход на относительный адрес rel16.
JMP reg/mem16 - Короткий переход по значению в регистре или ячейке памяти.
JMP ptr16:16 - Дальний переход по указателю ptr16:16.
JMP mem16:16 - Дальний переход по адресу в памяти mem16:16.
Передаёт управление программой в другую точку потока инструкций без записи возвращаемой информации. Операнд назначения указывает адрес инструкции, к которой выполняется переход. Этим операндом может быть непосредственное значение, регистр общего назначения или ячейка памяти.
Эта инструкция может быть использована для выполнения четырёх различных типов переходов:
Ближние и короткие переходы. При выполнении ближайшего перехода процессор переходит к адресу (в пределах текущего сегмента кода), который указан в целевом операнде. Целевой операнд задаёт либо абсолютное смещение (то есть смещение от основания сегмента кода), либо относительное смещение (смещение со знаком относительно текущего значения указателя команды в регистре IP). Близкий переход к относительному смещению в 8 бит (rel8) называется коротким переходом. Регистр CS не изменяется при ближних и коротких переходах.
Абсолютное смещение задаётся косвенно в регистре общего назначения или ячейке памяти (reg/mem16). Абсолютные смещения загружаются непосредственно в регистр IP.
Относительное смещение (rel8 или rel16) обычно указывается как метка в ассемблерном коде, но на уровне машинного кода оно кодируется как 8- или 16-разрядное непосредственное значение со знаком. Это значение добавляется к значению в регистре IP. (Здесь регистр IP содержит адрес инструкции, следующей за инструкцией jmp). При использовании относительных смещений код операции (для коротких и близких переходов) и атрибут размера операнда (для близких относительных переходов) определяют размер целевого операнда (8 или 16 бита).
Дальние переходы в режиме реального адреса или виртуального 8086. При выполнении дальнего перехода в режиме реального адреса или виртуального 8086 процессор переходит к сегменту кода и смещению, указанным целевым операндом. Здесь целевой операнд указывает абсолютный дальний адрес либо непосредственно с помощью указателя (ptr16:16 или ptr16:32), либо косвенно с помощью ячейки памяти (mem16:16 или mem16:32).
При использовании метода указателя сегмент и адрес вызываемой процедуры кодируются в инструкции с использованием 4-байтового (16-разрядный размер операнда) или 6-байтового (32-разрядный размер операнда) непосредственного дальнего адреса. При косвенном методе целевой операнд указывает ячейку памяти, которая содержит 4-байтовый (16-разрядный размер операнда) или 6-байтовый (32-разрядный размер операнда) дальний адрес. Дальний адрес загружается непосредственно в регистры CS и IP. Если атрибут равен 16, то два верхних байта регистра IP очищаются.
Дальние переходы в защищённом режиме. Когда процессор работает в защищённом режиме, инструкция jmp может использоваться для выполнения следующих трёх типов дальних переходов:
Инструкция jmp не может быть использована для выполнения дальних переходов между уровнями привилегий.
В защищённом режиме процессор всегда использует часть селектора сегментов в дальнем адресе для доступа к соответствующему дескриптору в GDT или LDT. Тип дескриптора (сегмент кода, шлюз вызова, шлюз задачи или TSS) и права доступа определяют тип выполняемого перехода.
Инструкция JMP
Переход к инструкции, указанной в операнде.
_____________JMP rel8 - Короткий переход на относительный адрес rel8.
_____________JMP rel16 - Короткий переход на относительный адрес rel16.
_____________JMP reg/mem16 - Короткий переход по значению в регистре или ячейке памяти.
_____________JMP ptr16:16 - Дальний переход по указателю ptr16:16.
_____________JMP mem16:16 - Дальний переход по адресу в памяти mem16:16.
Передаёт управление программой в другую точку потока инструкций без записи возвращаемой информации. Операнд назначения указывает адрес инструкции, к которой выполняется переход. Этим операндом может быть непосредственное значение, регистр общего назначения или ячейка памяти.
Эта инструкция может быть использована для выполнения четырёх различных типов переходов:
Ближние и короткие переходы. При выполнении ближайшего перехода процессор переходит к адресу (в пределах текущего сегмента кода), который указан в целевом операнде. Целевой операнд задаёт либо абсолютное смещение (то есть смещение от основания сегмента кода), либо относительное смещение (смещение со знаком относительно текущего значения указателя команды в регистре IP). Близкий переход к относительному смещению в 8 бит (rel8) называется коротким переходом. Регистр CS не изменяется при ближних и коротких переходах.
Абсолютное смещение задаётся косвенно в регистре общего назначения или ячейке памяти (reg/mem16). Абсолютные смещения загружаются непосредственно в регистр IP.
Относительное смещение (rel8 или rel16) обычно указывается как метка в ассемблерном коде, но на уровне машинного кода оно кодируется как 8- или 16-разрядное непосредственное значение со знаком. Это значение добавляется к значению в регистре IP. (Здесь регистр IP содержит адрес инструкции, следующей за инструкцией jmp). При использовании относительных смещений код операции (для коротких и близких переходов) и атрибут размера операнда (для близких относительных переходов) определяют размер целевого операнда (8 или 16 бита).
Дальние переходы в режиме реального адреса или виртуального 8086. При выполнении дальнего перехода в режиме реального адреса или виртуального 8086 процессор переходит к сегменту кода и смещению, указанным целевым операндом. Здесь целевой операнд указывает абсолютный дальний адрес либо непосредственно с помощью указателя (ptr16:16 или ptr16:32), либо косвенно с помощью ячейки памяти (mem16:16 или mem16:32).
При использовании метода указателя сегмент и адрес вызываемой процедуры кодируются в инструкции с использованием 4-байтового (16-разрядный размер операнда) или 6-байтового (32-разрядный размер операнда) непосредственного дальнего адреса. При косвенном методе целевой операнд указывает ячейку памяти, которая содержит 4-байтовый (16-разрядный размер операнда) или 6-байтовый (32-разрядный размер операнда) дальний адрес. Дальний адрес загружается непосредственно в регистры CS и IP. Если атрибут равен 16, то два верхних байта регистра IP очищаются.
Дальние переходы в защищённом режиме. Когда процессор работает в защищённом режиме, инструкция jmp может использоваться для выполнения следующих трёх типов дальних переходов:
Инструкция jmp не может быть использована для выполнения дальних переходов между уровнями привилегий.
В защищённом режиме процессор всегда использует часть селектора сегментов в дальнем адресе для доступа к соответствующему дескриптору в GDT или LDT. Тип дескриптора (сегмент кода, шлюз вызова, шлюз задачи или TSS) и права доступа определяют тип выполняемого перехода.