2.3.6. Операции над битами и байтами

Команда

Назначение

Процессор

ВТ база.смещение

Проверка бита

80386

Команда ВТ считывает в флаг СБ значение бита из битовой строки, определен­ной первым операндом - битовой базой (регистр или переменная), со смещением, указанным во втором операнде - битовом смещении (число или регистр). Когда первый операнд - регистр, то битовой базой считается 0 регистре и смещение не может превышать 15 или 31 (в зависимости от размера регистра); если оно превышает эти границы, в качестве смещения будет использоваться оста­ток от деления на 16 или 32 соответственно. Если первый операнд - переменная, то в качестве битовой базы нужен бит 0 указанного байта в памяти, а смещение может принимать значения от 0 до 31, если оно установлено непосредственно (старшие биты процессором игнорируются), и от -231 до 231-1, если оно указано в регистре.

Несмотря на то что эта команда считывает единственный бит из памя­ти, а процессор - целое двойное слово по адресу База + (4 X (Смещение/ 32)) или слово по адресу База + (2 х (Смещение/16)),в зависимости от разрядности адреса, все равно не следует пользоваться ВТ вблизи от недо­ступных для чтения областей памяти.

После выполнения команды ВТ флаг СБ равен значению считанного бита, флаги ОБ, 8Б, Х¥, АБ и РБ не определены.

Команда

Назначение

Процессор

BTS

Проверка и установка бита

BG3B6

BTR база.смещение

Проверка и сброс бита

BG3B6

ВТС база.смещение

Проверка и инверсия бита

BG3B6

Эти три команды соответственно устанавливают в 1 (БТБ), сбрасывают в О (ВТ11) и инвертируют (ВТС) значение бита, который находится в битовой строке с началом, определенным в базе (регистр или переменная), и смещением, указан­ным во втором операнде (число от 0 до 31 или регистр). Если битовая база - ре­гистр, то смещение не может превышать 15 или 31 в зависимости от разрядности этого регистра. Если битовая база - переменная в памяти, то смещение может принимать значения от      до        (при условии, что оно указано в регистре).

После выполнения команд БТБ, БТЯ и ВТС флаг СБ равен значению считан­ного бита до его изменения в результате действия команды, флаги ОБ, ББ, 7Б, АБ и РБ не определены.

Команда

Назначение

Процессор

BSF приемник.источник

Прямой поиск бита

BG3B6

BSR приемник.источник

Обратный поиск бита

BG3B6

ВББ сканирует источник (регистр или переменная), начиная с самого младшего бита, и записывает в приемник (регистр) номер первого встретившегося бита, рав­ного 1. Команда ВБЯ сканирует источник, начиная с самого старшего бита, и воз­вращает номер первого встретившегося ненулевого бита, считая от нуля. То есть, если источник равен 0000 0000 0000 ООЮЬ, то ВББ возвратит 1, а ВБЯ - 14.

Если весь источник равен нулю, значение приемника не определено и флаг 7Б устанавливается в 1, иначе 7Б всегда сбрасывается. Флаги СБ, ОБ, ББ, ЛБ и РБ не определены.

Команда

Назначение

Процессор

SETcc приемник

Установка байта по условию

BG3B6

Это набор команд, устанавливающих приемник (8-битный регистр или пере­менная размером в 1 байт) в 1 или 0, если удовлетворяется или не удовлетворяется определенное условие. Фактически в каждом случае проверяется состояние тех или иных флагов, но, когда команда из набора SETcc используется сразу после СМР, условия приобретают формулировки, соответствующие отношениям меж­ду операндами СМР (см. табл. 6). Скажем, если операнды СМР были неравны, то команда SETNE, выполненная сразу после СМР, установит значение своего опе­ранда в 1.

Слова «выше» и «ниже» в таблице относятся к сравнению чисел без знака, слова «больше» и «меньше» учитывают знак.

Таблица б. Команды

Код командні

Реальное условие

Условие для 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

2F= 1

Если равно

Если ноль

SETG SETNLE

ZF = 0 и SF = OF

Если больше

Если не меньше и не равно

SETGE SETNL

SF = OF

Если больше или равно

Если не меньше

SETL SETNGE

SF 0 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

Если есть знак

 

Команда

Назначение

Процессор