Организация ЭВМ и систем: Курс лекций (Позиционные системы счисления. Процессоры семейства IA-32. Лазерные принтеры), страница 22

Если база адресует память, а смещение — непосредственный операнд, то процессор использует только младшие 5 бит смещения; если же смещение задано регистром общего назначения, то смещение интерпретируется как 32-разрядное число со знаком, которое может принимать значение от -231 до 231-1.

Флаги AF, OF, PF, SF, ZF не определены.

BTS            база, смещение                    проверка и установка бита        80386

BTR            база, смещение                    проверка и сброс бита               80386

BTC            база, смещение                    проверка и инверсия бита         80386

Команды аналогичны BT, но после занесения значения заданного бита в CF соответственно устанавливают, сбрасывают или инвертируют заданный бит.

Примечание. Несмотря на то, что эта команда считывает единственный бит памяти, процессор считывает слово или двойное слово по адресу база+(2´(смещение:16)) или база+(4´(смещение:32)) соответственно режиму адресации, поэтому не следует пользоваться командами типа BT вблизи областей памяти, недоступных для чтения или для записи, если команда предполагает таковую.

BSF            приёмник, источник           прямой поиск единичного бита 80386

BSR            приёмник, источник           обратный поиск единичного бита                   80386

Команды сканируют источник и записывают в приёмник номер первого встретившегося бита, равного 1. Команда BSF сканирует от младшего разряда к старшему, а BSR — от старшего к младшему, при этом обе команды считают номера битов с нуля. Например, если источник равен 0000 0000 0000 0001, то BSF вернёт 0, а BSR — 15.

Источником может быть:

—  16- или 32-разрядный регистр общего назначения;

—  16- или 32-разрядная область памяти.

Приёмником может быть регистр.

Если источник равен нулю, значение приёмника не определено, а ZF устанавливается. Иначе ZF сбрасывается.

Остальные флаги состояния не определены.

SETxx        приёмник                             установка байта по условию     80386

Команды данного набора устанавливают приёмник в 1 или 0, если соответственно удовлетворяется или не удовлетворяется условие.

xx имеют то же значение, что и в командах условного перехода.

Приёмником может быть:

—  8-битный регистр общего назначения;

—  однобайтная область памяти.

7.7.  Команды передачи управления

JMP            операнд                               безусловный переход                  8086

Передаёт управление в другую точку программы, не сохраняя какой-либо информации для возврата. Операнд задаёт адрес перехода.

Операндом может быть:

—  непосредственный операнд;

—  регистр;

—  память.

В программах на языке ассемблера непосредственный операнд задаётся, как правило, именем метки, установленной перед командой, на которую выполняется переход.

Различают следующие виды переходов:

—  короткий (short) — адрес перехода находится в пределах -128…+127 байт от команды JMP;

—  ближний (near) — адрес перехода находится в том же сегменте памяти, что и команда JMP — только для процессоров 80836 и выше;

—  дальний (far) — адрес перехода находится в другом сегменте;

—  переход с переключением задачи — передача управления другой задаче в многозадачной среде.

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

Действие команды при коротких и ближних переходах следующее.

Если операнд — регистр или переменная в памяти, то его содержимое просто копируется в счётчик команд, как если бы это была команда MOV.

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

При дальнем переходе в сегмент с теми же привилегиями команда JMP загружает новое значение в счётчик команд и новый селектор сегмента кода в CS, используя старшие 16 бит операнда как новое значение для CS и младшие 16 или 32 бит — как значение для IP или EIP.