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

Выше мы рассматривали уже команду

jmp   адрес

безусловного перехода. Это команда передаёт управление на команду, которая находится по указанному адресу. Адрес может быть указан с помощью смещения, состоящего из одного байта (SHORT PTR) или слова (NEAR PTR), или он может быть двойным словом (FAR PTR). Команда прибавляет к счетчику команд IP указанное смещение или устанавливает IP, равным указанному двойному слову.

При внутрисегментном переходе предполагается, что содержимое регистра CS не изменяется, а изменяется регистр IP.

Для команды

jmp    short ptr lab1

Метка lab1 отстоит от текущей команды в диапазоне от –128 до +127 байт.

При переходе

jmp    near ptr lab1

Смещение lab1 занимает два байта, и lab1 находится в диапазоне от –32768 до 32765 байт от текущей команды.

Для межсегментного перехода состоит из четырех байт, два из которых составляют смещение, и два – значение сегментной составляющей адреса. Для команды

jmp    far ptr lab1

Метка lab1 может находиться в другом сегменте. В этом случае эта метка должна быть определена как

lab2   label far

Пример. В программе

<1> code segment

<2> assume cs:code

<3> start:

<4>        jmp  far ptr lab2

<5> lab1   label far

<6>        mov  ax,4c00h

<7>        int  21h

<8> code   ends

<9> code2  segment

<10> assume cs:code2

<11> lab2   label far

<12>        mov  ah,10h

<13>        int  16h

<14>        jmp  far ptr lab1

<15> code2  ends

<16> end start

Производится переход во второй сегмент, где программа ожидает ввода символа с клавиатуры, а после его ввода возвращается в первый сегмент.