Логические команды, сдвиги, битовые команды. Логические команды. (Лекция 11)

Содержание

Слайд 2

Булева алгебра

Булева алгебра

Слайд 3

Использование логического И

Логическое умножение AND и TEST используют для сброса в 0

Использование логического И Логическое умножение AND и TEST используют для сброса в
отдельных битов первого операнда.
Подобранный для этих целей непосредственный второй операнд называют «маска». Для сброса отдельных битов в 0 маска должна иметь нули в этих разрядах, в остальных - 1
Пример: надо сбросить в 0 биты 2,3 и 4 в регистре bl.
Маска должна быть такой: 11100011
and bl, 11100011b ; биты bl: ???????? (произвольный код)
& 11100011 (маска)
-------------------
рез-т в bl: ???000??

Слайд 4

Использование логического ИЛИ

Логическое сложение OR используют для установки в 1
отдельных

Использование логического ИЛИ Логическое сложение OR используют для установки в 1 отдельных
битов первого операнда. Второй непосредственный операнд является «маской».
Для установки отдельных битов в 1 маска должна иметь единицы в этих разрядах, в остальных – 0.
Пример: Установить в единицы биты 7-5 и 1-0 в регистре bl
or bl, 11100011b ; bl: ???????? (произвольный код)
˅ 11100011 (маска)
-------------------
bl: 111???11

Слайд 5

Использование исключающего ИЛИ

Исключающее ИЛИ (сложение по модулю 2) XOR используют для

Использование исключающего ИЛИ Исключающее ИЛИ (сложение по модулю 2) XOR используют для
инвертирования отдельных битов первого операнда. Второй непосредственный операнд - «маска».
Для инвертирования отдельных битов маска должна иметь единицы в этих разрядах, в остальных – 0.
Пример: Инвертировать биты 7-5 и 1-0 в регистре bl
хor bl, 11100011b ; bl: aaaaaaaa (произвольный код)
⊕ 11100011 (маска)
-------------------
bl: āāāaaaāā

Слайд 6

Команды сдвигов

Выполняют сдвиг кодов, находящихся в регистре или памяти, на указанное количество

Команды сдвигов Выполняют сдвиг кодов, находящихся в регистре или памяти, на указанное
бит
Количество бит задается 2-м операндом. Его можно указать двумя способами:
- однобайтным непосредственным числом (i8)
- предварительно занести в регистр CL.
Общий синтаксис команд сдвига:
Команда сдвига r/m, i8 ; сдвиг на i8 бит
Команда сдвига r/m, cl ; сдвиг на количество бит,
записанных в cl

Слайд 7

Циклические сдвиги

ROL - циклический влево
Выдвинутый бит заползает с стороны младших разрядов

Циклические сдвиги ROL - циклический влево Выдвинутый бит заползает с стороны младших
и дублируется в СF
Пример: циклический сдвиг однобайтного кода влево на 3 бита
bl= 01110000 → rol bl, 3 → bl= 100000011
ROR –циклический вправо

Слайд 8

Циклические сдвиги через флаг CF

Флаг CF становится дополнительным битом в контуре сдвига
RCR

Циклические сдвиги через флаг CF Флаг CF становится дополнительным битом в контуре
- циклический вправо через СF
RCL - циклический влево через СF
Пример: пусть, bl= 11110001 и флаг cf=0
rcr bl,1 ; в результате: bl= 01111000 и cf=1

Слайд 9

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

В освобождающийся разряд заносится 0, а выдвигаемый бит попадает

Простые сдвиги В освобождающийся разряд заносится 0, а выдвигаемый бит попадает во
во флаг СF.
SHL – сдвиг влево
SHR – сдвиг вправо
Пример. Простой сдвиг однобайтного кода вправо на 3 бита
bl =11110001 → shr bl, 3 → bl = 00011110 и бит cf = 0

Слайд 10

Выполнение умножения/деления простыми сдвигами

Простые сдвиги ВСЕГДА используют для умножения/ деления на величины,

Выполнение умножения/деления простыми сдвигами Простые сдвиги ВСЕГДА используют для умножения/ деления на
кратные степени двойки (2,4,8,16,32,64,128, …)
Сдвиг влево на 1 бит - умножение на 2
на 2 бита - . . . .. на 4
на 3 бита = . . на 8
на к бит = . . . . на 2к
Сдвиг вправо на 1 бит - деление на 2
. . . . .
на к бит - деление на 2к
Пример: Сдвиг влево на 3 = умножению на 8
bl= 0000011 (310) → shl bl, 3 → bl=00011000 (2410)

Слайд 11

Арифметические сдвиги

Используются для сдвига знаковых чисел.
SAL – арифметический сдвиг влево

Арифметические сдвиги Используются для сдвига знаковых чисел. SAL – арифметический сдвиг влево
(аналогичен простому сдвигу SHL)
SAR – арифметический сдвиг вправо. Освобождающиеся разряды заполняются значением знакового (старшего) разряда
Пример: деление на 4 знакового кода арифм.сдвигом вправо на 2
bl= 11111000 → sar bl, 2 → bl = 11111110
(-810) (-210)

Слайд 12

Команды битовых операций

Поиск бита
BSF reg, reg/mem ; Поиск самого младшего единичного бита

Команды битовых операций Поиск бита BSF reg, reg/mem ; Поиск самого младшего
в reg
или mem. В первом reg возвращается номер бита.
Пример: пусть, bl= 00101000
Результат выполнения команды bsf al, bl → al= 03h
BSR reg, reg/mem ; Поиск самого старшего единичного бита
в reg/ mem. В первом reg возвращается номер бита
Пример: пусть, bl= 00101000
Результат выполнения команды bsr al, bl → al= 05h

Слайд 13


Копирование бита в CF
ВТ reg/mem,i8 ; из reg или mem во

Копирование бита в CF ВТ reg/mem,i8 ; из reg или mem во
флаг CF копируется бит
с номером i8
Пример:
bl=11001011
Результат выполнения команды bt bl, 3 → CF =1
Имя файла: Логические-команды,-сдвиги,-битовые-команды.-Логические-команды.-(Лекция-11).pptx
Количество просмотров: 45
Количество скачиваний: 1