CBW
CWD
По команде CBW число из al переписывается в ax (дополнение выполняется знаковыми разрядами). Аналогично по команде CWD число из ax переписывается в два регистра dx и ax.
Команды передачи управления
JMP <адрес перехода>; имеет три модификации в зависимости от длины ее адресной части:
short - при переходе по адресу, который находится на расстоянии -128...127 байт относительно адреса данной команды (длина адресной части 1 байт);
near ptr - при переходе по адресу, который находится на расстоянии З2 Кбайта (-32768...32767 байт) относительно адреса данной команды (длина адресной части 2 байта);
far ptr - при переходе по адресу, который находится на расстоянии превышающем 32 Кбайта (длина адресной части 4 байта).
При указании перехода к командам, предшествующим команде перехода, ассемблер сам определяет расстояние до метки перехода и строит адрес нужной длины. При указании перехода к последующим частям программы необходимо ставить указатели short, near ptr и far ptr.
В качестве адреса команды перехода используются метки трех видов:
а) <имя>: nор (nор - команда «нет операции»);
б) <имя> label near (для внутрисегментных переходов);
в) <имя> label far (для внесегментных переходов).
Примеры:
а) jmp short b - переход по адресу b;
б) jmp [bx] - переход по адресу в регистре bx (адрес определяется косвенно);
в) a: пор -описание метки перехода «a»;
г) b label near - описание метки перехода «b».
Команды условного перехода
<мнемоническая команда> <адрес перехода>
Набор инструкций процессора 8086 предусматривает большое разнообразие инструкций условных переходов, что позволяет вам осуществлять переход почти по любому флагу или их комбинации. Можно осуществлять условный переход по состоянию нуля, переноса, по знаку, четности или флагу переполнения и по комбинации флагов, показывающих результаты операций чисел со знаками.
Перечень инструкций условных переходов приводится в таблице 3.2.
Таблица 3.2 Инструкции условных переходов
Название | Значение | Проверяемые флаги |
JB/JNAE | Перейти, если меньше / перейти, если не больше или равно | CF = 1 |
JAE/JNB | Перейти, если больше или равно / перейти, если не меньше | CF = 0 |
JBE/JNA | Перейти, если меньше или равно / перейти, если не больше | CF=1 или ZF=1 |
JA/JNBE | Перейти, если больше / перейти, если не меньше или равно | CF = 0 и ZF = 0 |
JE/JZ | Перейти, если равно | ZF = 1 |
JNE/JNZ | Перейти, если не равно | ZF = 0 |
JL/JNGE | Перейти, если меньше чем / перейти если не больше чем или равно | SF = OF |
JGE/JNL | Перейти, если больше чем или равно / перейти, если не меньше чем | SF = OF |
JLE/JNLE | Перейти, если меньше чем или равно / перейти, если не больше, чем | ZF = 1 или SF =OF |
JG/JNLE | Перейти, если больше чем / перейти, если не меньше чем или равно | ZF = 0 или SF = OF |
JP/JPE | Перейти по четности | PF = 1 |
JNP/JPO | Перейти по нечетности | PF = 0 |
JS | Перейти по знаку | SF = 1 |
JNS | Перейти, если знак не установлен | SF = 0 |
JC | Перейти при наличии переноса | CF = 1 |
JNC | Перейти при отсутствии переноса | CF = 0 |
JO | Перейти по переполнению | OF = 1 |
JNO | Перейти при отсутствии переполнения | OF = 0 |
CF - флаг переноса, SF - флаг знака, OF - флаг переполнения, ZF - флаг нуля, PF - флаг четности |
Все команды имеют однобайтовое поле адреса, следовательно, смешение не должно превышать -128...127 байт. Если смещение выходит за указанные пределы, то используется специальный прием:
Вместо программируется
Jz zero jnz continue
Jmp zero
continue:
Команды организации циклической обработки
В качестве счетчика цикла во всех командах циклической обработки используется содержимое регистра cx.
- Команда организации цикла
LOOP <адрес перехода>; при каждом выполнении уменьшает содержимое регистра cx на единицу и передает управление по указанному адресу, если cx не равно 0:
mov cx, loop_count; загрузка счетчика
begin_loop:
;... тело цикла
Loop begin_loop
Примечание. Если перед началом цикла в регистр cx загружен 0, то цикл выполняется 35536 раз.