Группа команд: проверить и изменить
Команды проверяют значение заданного бита (записывают его содержимое в бит C) и меняют значение в соответствии с заданным кодом. Первый операнд задает проверяемое и изменяемое данное, второй - номер бита. В качестве первого операнда может быть регистр и память размером 1, 2 или 4 байта. Второй операнд задается константой или регистром. Команды для проверки и изменеия заданных битов представлены в табл. 10.2
Таблица 10.2. Команды для проверки и изменеия заданных битов
Назначение | Код | Выполняемые действия | |||
Проверка бита
| Bt | C=(oп1 & (1<<оп2))>> оп2 | |||
Проверка и установка бита | Bts | C=(oп1 & (1<<оп2))>> оп2;
oп1 |= (1<<оп2)) | |||
Проверка и сброс бита | Btr | C=(oп1 & (1<<оп2))>> оп2;
oп1 &= (~(1<<оп2)) | |||
Проверка и инвертирование бита | Btc | C=(oп1 & (1<<оп2))>> оп2;
oп1 ^= (1<<оп2)) |
Примеры использования команд
Пример 1. Вычислить сумму всех битов, стоящих на четных местах в двойном слове
p486
ideal
model flat
extrn ExitProcess:proc
dataseg
x dd 0a5a5a5a5h
s dd ?
codeseg
begin:
xor edx, edx; s=0
mov eax, [x]
mov ecx, 16
mov ebx, 0
for:
bt eax, ebx
adc edx, 0
add ebx, 2
loop for
mov [s], edx
call ExitProcess
end begin
Программа выдает ответ 8.