[Назад] [Далее] | |
BT база, смещение | |
Проверка бита | |
80386 |
Команда ВТ считывает во флаг CF значение бита из битовой строки, указанной первым операндом, битовой базой (регистр или переменная), со смещением, указанным во втором операнде, битовом смещении (число или регистр). Если первый операнд — регистр, то битовой базой считается бит 0 в указанном регистре и смещение не может превышать 15 или 31 (в зависимости от размера регистра); если оно превышает эти границы, в качестве смещения будет использован остаток от деления его на 16 или 32 соответственно. Если первый операнд — переменная, то в качестве битовой базы используется бит 0 указанного байта в памяти, а смещение может принимать значения от 0 до 31, если оно указано непосредственно (старшие биты процессором игнорируются), и от -231 до 231–1, если оно указано в регистре.
Несмотря на то что эта команда считывает единственный бит из памяти, процессор считывает целое двойное слово по адресу База+(4*(Смещение/32)) или слово по адресу База+(2*(Смещение/16)), в зависимости от разрядности адреса, так что не следует пользоваться ВТ вблизи от не доступных для чтения областей памяти. | ||
После выполнения команды ВТ флаг CF равен значению считанного бита, флаги OF, SF, ZF, AF и PF не определены.
BTS база, смещение | |
Проверка и установка бита | |
BTR база, смещение | |
Проверка и сброс бита | |
BTC база, смещение | |
Проверка и инверсия бита | |
80386 |
Эти три команды соответственно устанавливают в 1 (BTS), сбрасывают в 0 (ВТR) и инвертируют (ВТС) значение бита, который находится в битовой строке с началом, указанным в базе (регистр или переменная), и смещением, указанным во втором операнде (число от 0 до 31 или регистр). Если битовая база — регистр, то смещение не может превышать 15 или 31 в зависимости от разрядности этого регистра. Если битовая база — переменная в памяти, то смещение может принимать значения от -231 до 231–1 (если оно указано в регистре).
После выполнения команд BTS, BTR и ВТС флаг CF равен значению считанного бита до его изменения в результате действия команды, флаги OF, SF, ZF, AF и PF не определены.
BSF приемник, источник | |
Прямой поиск бита | |
BSR база, смещение | |
Обратный поиск бита | |
80386 |
BSF сканирует источник (регистр или переменная), начиная с самого младшего бита, и записывает в приемник (регистр) номер первого встретившегося бита, равного 1. Команда BSR сканирует источник, начиная с самого старшего бита, и возвращает номер первого встретившегося ненулевого бита, считая от нуля, то есть, если источник равен 0100 0000 0000 0010b, то BSF возвратит 1 a BSR — 14.
Если весь источник равен нулю, значение приемника не определено и флаг ZF устанавливается в 1, иначе ZF всегда сбрасывается. Флаги CF, OF, SF, AF и PF не определены.
SETcc приемник | |
Установка байта по условию | |
80386 |
Это набор команд, которые устанавливают приемник (восьмибитный регистр или переменная размером в один байт) в 1 или 0, если удовлетворяется или не удовлетворяется определенное условие. Условием в каждом случае реально является состояние тех или иных флагов, но, если команда из набора SETcc используется сразу после СМР, условия приобретают формулировки, соответствующие отношениям между операндами СМР (см. табл. 6). Скажем, если операнды СМР были неравны, то команда SETNE, выполненная сразу после этого СМР, установит значение своего операнда в 1.
Слова «выше» и «ниже» в таблице относятся к сравнению чисел без знака, слова «больше» и «меньше» учитывают знак.
Таблица 6. Команды SETcc
Код команды | Реальное условие | Условие для CMP |
SETA SETNBE |
CF = 0 и ZF = 0 | если выше если не ниже или равно |
SETAE SETNB SETNC |
CF = 0 | если выше или равно если не ниже если нет переноса |
SETB SETNAE SETC |
CF = 1 | если ниже если не выше или равно если перенос |
SETBE SETNA |
CF = 1 и ZF = 1 | если ниже или равно если не выше |
SETE SETZ |
ZF = 1 | если равно если ноль |
SETG SETNLE |
ZF = 0 и SF = OF | если больше если не меньше или равно |
SETGE SETNL |
SF = OF | если больше или равно если не меньше |
SETL SETNGE |
SF <> OF | если меньше если не больше или равно |
SETLE SETNG |
ZF = 1 и SF <> OF | если меньше или равно если не больше |
SETNE SETNZ |
ZF = 0 | если не равно если не ноль |
SETNO | OF = 0 | если нет переполнения |
SETO | OF = 1 | если есть переполнение |
SETNP SETPO |
PF = 0 | если нет четности если нечетное |
SETP SETPE |
PF = 1 | если есть четность если четное |
SETNS | SF = 0 | если нет знака |
SETS | SF = 1 | если есть знак |