Skip to content

13. Команды побитовых операций. Логические команды

Natasha Gurova edited this page Jun 24, 2022 · 14 revisions
Clone this wiki locally

Побитовая арифметика

AND <приемник>, <источник>          ; побитовое И                (AND al, 00001111b)
OR <приемник>, <источник>           ; побитовое ИЛИ
XOR <приемник>, <источник>          ; побитовое исключающее ИЛИ  (XOR AX, AX)
NOT <приемник>                      ; инверсия
TEST <приемник> <источник> ; Аналог AND, но результат не сохраняется. 
                           ; Выставляются SF, ZF, PF.  

Побитовые сдвиги

SAR <приёмник>, <счётчик>  ; арифметический сдвиг вправо (с сохранением знакового бита)
SHR <приёмник>, <счётчик>           ; логический сдвиг вправо (старший бит зануляем)
SHL <приёмник>, <счётчик>           ; сдвиг влево (SAL - эквивалентная команда)
ROR <приёмник>, <счётчик>           ; циклический сдвиг вправо
ROL <приёмник>, <счётчик>           ; циклический сдвиг влево
RCR <приёмник>, <счётчик>           ; циклический сдвиг вправо, через флаг переноса
RCL <приёмник>, <счётчик>           ; циклический сдвиг влево, через флаг переноса 

О циклическом сдвиге с флагом - задействуется не 16 бит, а 17, младший бит попадет в CF, а CF попадет в старший бит при сдвиге вправо

Все команды изменяют регистр флагов FLAGS


ДОП

Нужно понимать, что на лекциях Кузнецов также давал следующие команды для работы с битами/байтами

BT, BTR, BTS, BTC, BSF, BSR, SETcc

? Что такое байт?
  Минимальная адресуемая единица памяти
? Что такое битовая строка?
  Последовательность битов, которая интерпретируется как независимые биты, 
  а не как какие-то данные. 
  Пример – регистр флагов.

Работать с битами напрямую нельзя, поэтому у нас есть чудо команды.

BT <база>, <смещение>          ; считать в CF значение бита из битовой строки
BTS <база>, <смещение>         ; установить бит в 1
BTR <база>, <смещение>         ; сбросить бит в 0
BTC <база>, <смещение>         ; инвертировать бит
BSF <приемник>, <источник>     ; прямой поиск бита (от младшего разряда)
BSR <приемник>, <источник>     ; обратный поиск бита (от старшего разряда)
SETcc <приемник>    ; выставляет приемник (1 байт) в 1 или 0 
                    ; в зависимости от условия, аналогично Jcc.

Пример, в котором я не очень уверена

mov AX, OOFFh       ; Анализируемое данное (помним, что AX - 2 байта)
                    ;              |
bts AX, 8           ; AX = 0000 0000 1111 1111 (бит 8 был = 0 -> установка бита, ZF = 0)
                    ; AX = 0000 0001 1111 1111