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
Допустимо использование дополнительных режимов адресации 32-разрядных процессоров. Для 32-разрядных приложений допустимо использование 32-битовых операндов. В защищенном режиме вместо сегментного адреса сегмента (при дальних переходах) выступает его селектор.