Иллюстрированный самоучитель по Assembler

J

JMP Безусловный переход

Команда jmp передает управление в указанную точку того же или другого программного сегмента. Адрес возврата не сохраняется. Команда не воздействует на флаги процессора.

Команда jmp имеет пять разновидностей:

  • переход прямой короткий (в пределах -128 … + 127 байтов);
  • переход прямой ближний (в пределах текущего программного сегмента);
  • переход прямой дальний (в другой программный сегмент);
  • переход косвенный ближний;
  • переход косвенный дальний.

Все разновидности переходов имеют одну и ту же мнемонику jmp, хотя и различающиеся коды операций. Во многих случаях транслятор может определить вид перехода по контексту, в тех же случаях, когда это невозможно, следует использовать атрибутные операторы:

  • short – прямой короткий переход;
  • near ptr – прямой ближний переход;
  • far ptr – прямой дальний переход;
  • word ptr – косвенный ближний переход;
  • dword ptr – косвенный дальний переход.

Примеры прямого короткого перехода:

jmp short shpt; Переход на метку shpt
;в пределах +127…-128 байтов
jmp shpt; То же самое, если shpt
;находится выше по тексту программы

Примеры прямого ближнего перехода:

jmp pt; Переход на метку pt
;в пределах текущего сегмента
jmp near ptr pt; То же самое

Примеры косвенных ближних переходов.
Пример 1:

mov BX,offset pt; ВХ=адрес точки перехода
jmp BX; Переход в точку pt

Пример 2:

;В полях данных:
addr dw pt; Ячейка с адресом точки перехода
;В программном сегменте:
jmp DS:addr; Переход в точку pt
jmp word ptr addr; To же самое

Пример 3:

; В полях данных:
addr dw pt; Ячейка с адресом точки перехода
;В программном сегменте:
mov DI,offset addr; В1=адрес ячейки с адресом
;точки перехода
jmp [DI]; Переход в точку pt

Пример 4:

;В полях данных:
tb1 dw pt1; Ячейка с адресом 1
dw pt2; Ячейка с адресом 2
dw pt3; Ячейка с адресом 3
;В программном сегменте:
mov BX,offset tbl; BX=aflpec таблицы адресов переходов
mov SI, 4; 31=смещение к адресу pt3
call [BX][SI]; Переход в точку pt3

Примеры прямых дальних переходов:

jmp far ptr farpt; Переход на метку farpt в
;другом программном сегменте
jmp farpt; Переход на метку farpt в другом
;программном сегменте, если farpt
;объявлена дальней меткой
;директивой farpt label far

Примеры косвенных дальних переходов.
Пример 1:

; В полях данных:
addr dd pt; Поле с двухсловным
;адресом точки перехода; В программном сегменте:
jmp DS:addr; Переход в точку pt
jmp dword ptr addr; То же самое

Пример 2:

; В полях данных:
addr dd pt; Поле с двухсловным
;адресом точки перехода
;В программном сегменте:
mov DI,offset addr; DI =адрес поля с адресом
;точки перехода jmp [DI]; Переход в точку pt

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › J Допустимо использование дополнительных режимов адресации 32-разрядных процессоров. Для 32-разрядных приложений допустимо использование 32-битовых операндов. В защищенном режиме вместо сегментного адреса сегмента (при дальних переходах) выступает его селектор.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.