Главная страница
Предыдущая страница (команды сдвига)

На этой короткой странице рассмотрим описание операций над битами и байтами. Иногда бывает нужно получить, например, пятый или шестой бит регистра или переменной. Можно, например, воспользоваться командами and и shl|shr. Но есть гораздо более удобные команды для этих целей

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


1) bt база, смещение – проверка бита. Считывает в флаг CF значение бита из битовой строки, определённой первым операндом – битовой базой (регистр|переменная). Смещение – число или регистр, если регистр, то разрядность его должна совпадать с разрядностью базы. Разрядность битовой строки – 16|32. Когда первый операнд – регистр, битовая база - бит 0 в регистре, смещение не может превышать 15|31 (в зависимости от размера регистра). Если превышает – берётся остаток от деление на 16|32. Если первый операнд – переменная, то в качестве битовой базы нужен бит 0 указанного байта в памяти, а смещение от 0 до 31. Пусть, например, x=0000000001100100b. Тогда после "bt word ptr x, 0" будет CF=0 (последний бит), после "bt word ptr x, 1" будет CF=0 (предпоследний бит), после "bt word ptr x, 2" будет CF=1 (предпредпоследний бит). Не следует пользоваться командой bt вблизи недоступных для чтения областей памяти!!! После выполнения bt флаги OF, SF, ZF, AF, PF не определены. Пример: после выполнения последовательности: mov ax, 1; bt ax, 0; флаг CF=1 (нулевому биту). После выполнения: mov ax, 1; bt ax, 1; флаг CF=0 (первому биту)

2) bts база, смещение – проверка и установка бита
2) btr база, смещение – проверка и сброс бита
2) btc база, смещение – проверка и инверсия бита
Действуют по аналогии с bt. Но они не только проверяют бит (устанавливают CF), но и изменяют его. После выполнения команд bts|btr|btc флаг CF равен значению считанного бита до его изменения, остальные флаги не определены

3) bsf приёмник, источник - прямой поиск бита
3 bsr приёмник, источник - обратный поиск бита. Приёмник – регистр, источник – регистр|переменная. bsf сканирует источник (r|m), разрядность 16|32 начиная с младшего бита и записывает в приёмник (r16|r32) номер первого встретившегося бита, равного 1. bsr сканирует начиная со старшего бита. То есть если источник=0000000000001010b, то bsf возвратит 1, а bsr возвратит 3. Если весь источник равен нулю, значение приёмника не определено и ZF=1, иначе ZF=0. Флаги CF, OF, SF, AF, PF не определены

4) setcc приёмник – установка байтов по условию. Это набор команд, устанавливающих приёмник (r8|m8) в 1 или 0, если удовлетворяется или не удовлетворяется определённое условие. Например, если операнды были не равны, то setne, выполненная сразу после cmp, установит приёмник в 1. Набор команд аналогичен команде jcc (там есть таблица условных переходов)


Следующая страница (десятичная арифметика)