Слайд 2ЛОГИЧЕСКИЕ ОПЕРАЦИИ
в
Ассемблере
Слайд 3Логические операции
Логические операции выполняются над операндами по правилам формальной логики.
Результат
выполнения лог.операции может:
передаваться в один из операндов
выражаться в
изменении состояния флагов
Слайд 4Флаги
CF – флаг переноса = 1, если предыдущий операнд не
уместился в приемнике после беззнаковой операции
ZF – флаг нуля =
1, если рез-т пред. команды=0
SF – флаг знака = 1, если результат <0
OF – флаг переполнения = 1, если рез-т предыд. арифм. операции выходит за пределы регистра (для знаковых операций).
PF – флаг четности = 1, если мл.байт рез-та предыд. команды имеет четное число битов=1
AF – вспомогательный флаг переноса = 1 при переносе или заёме из бита 4 результата. (Для двоично-десятичной BCD арифметики).
IF – флаг прерываний = 0, чтобы CPU перестал обрабатывать прерывания от внешних устр-в
DF – флаг направления = 1, чтобы строки команд выполнялись в сторону уменьшения адресов (10-й бит)
Слайд 5Логические операции
Логическое побитовое «И»
AND оп1, оп2
Результат посылается в оп1.
Длина у
обоих операндов должна быть одинаковой
Флаги ZF, SF, PF устанавливаются по
результату (см.далее).
OF=CF=0
Слайд 6Логические операции
Логическое побитовое «И»
Таблица истинности для побитового «И»
Слайд 7Логические операции
Логическое побитовое «И»
Команда AND часто используется для сброса отдельных
битов двоичного числа (например, флагов состояния процессора) по заданной маске
(один из операндов).
Если бит маски равен 1, значение соответствующего разряда числа не изменяется (разряд замаскирован),
а если равен 0 — то сбрасывается.
Слайд 8Пример
mov ax, 00111011b
and ax, 00001111b
Слайд 10Алгоритм работы команды по изменению флагов
Начало
Конец
R = оп1 and оп2
ZF
= 0
SF = 0
ZF = 1
SF = 1
R = 0
R
< 0
да
да
Слайд 11Логические операции
Логическое побитовое «И» без сохранения результата
TEST оп1, оп2
Результат НЕ
посылается в оп1.
Длина у обоих операндов должна быть одинаковой
Флаги ZF,
SF, PF устанавливаются по результату.
OF=CF=0
Применяется часто для анализа значения отдельных битов числа по маске.
Слайд 12Логические операции
Логическое побитовое «И» без сохранения результата
Пример: тестирование нескольких битов.
Задача:
узнать установлены ли 1-й и 4-й биты числа 21 в
0?
mov ax, 21; исходное число
mov bx, 00010010b; маска
test ax, bx
Слайд 13
Логические операции
Логическое побитовое «И» без сохранения результата
Слайд 14Логические операции
Логическое побитовое «И» без сохранения результата
Пример 2: тестирование нескольких
битов.
Задача: узнать установлены ли 1-й и 4-й биты числа 77
в 0?
mov ax, 77; исходное число
mov bx, 00010010b; маска
test ax, bx
Слайд 15Логические операции
Логическое побитовое «И» без сохранения результата
Слайд 16Логические операции
Логическое побитовое «ИЛИ»
OR оп1, оп2
Результат посылается в оп1.
Длина
у обоих операндов должна быть одинаковой
Флаги ZF, SF, PF устанавливаются
по результату.
OF=CF=0
Слайд 17Логические операции
Логическое побитовое «ИЛИ»
Таблица истинности для побитового «ИЛИ»
Слайд 18Логические операции
Логическое побитовое «ИЛИ»
Используется для установки в 1 отдельных битов
двоичного числа (например, флагов состояния процессора) по заданной маске.
Если бит
маски равен 0, значение соответствующего разряда числа не изменяется,
Если равен 1 — то устанавливается в 1.
Слайд 19Логические операции
Логическое побитовое «ИЛИ»
mov ax, 00111011b
or ax, 00001111b
Пример
Слайд 20Логические операции
Логическое побитовое «ИЛИ»
Пример 2
Преобразование числа в ASCII-код символа (0-9)
mov
ax, 7
or ax, 30h
Слайд 21Логические операции
Логическое побитовое «ИЛИ»
Команда OR:
Сбрасывает флаги переполнения (OF) и переноса
(CF).
Устанавливает значения флагов знака (SF), нуля (ZF) и четности (PF)
в соответствии со значением результата.
Команду OR можно использовать для определения знака числа (при равенстве операндов)
Слайд 22Логические операции
Логическое побитовое «ИЛИ»
Пример 3. Определение знака числа
or al, al
Слайд 23Логические операции
Логическое исключающее «ИЛИ»
XOR оп1, оп2
Результат посылается в оп1.
Длина у
обоих операндов должна быть одинаковой
Флаги ZF, SF, PF устанавливаются по
результату.
OF=CF=0
Слайд 24Логические операции
Логическое исключающее «ИЛИ»
Таблица истинности для исключающего «ИЛИ»
Слайд 25Логические операции
Инверсия
NOT оп.
Инверсия всех битов.
Флаги не меняются
Слайд 26Логические операции
Инверсия
Пример
mov ax, 5
not ax
inc
ax
mov ax, 5
neg ax
Слайд 29Логические операции
Сравнение операндов
CMP оп1, оп2
Вычитание без сохранения разности.
Оп1 –
регистр или ОЗУ(переменная)
Оп2 – регистр или ОЗУ или константа
Оба операнда
не могут быть в ОЗУ
Результат: изменение флагов ZF, SF
Похожа на команду SUB, но…
Слайд 30Логические операции
Сравнение операндов
Слайд 31Алгоритм работы команды CMP
Начало
Конец
R = оп1 – оп2
ZF = 0
SF
= 0
ZF = 1
SF = 1
R = 0
R < 0
да
да
Слайд 32Арифметические команды
Сравнение операндов cmp
Пример
mov ax, 15
mov bx, 15
cmp ax, bx
inc
ax
cmp ax, bx
sub ax, 2
cmp ax, bx
Слайд 33Логические операции
Сравнение операндов cmp
ax = bx
Слайд 34Логические операции
Сравнение операндов cmp
ax > bx
Слайд 35Логические операции
Сравнение операндов cmp
ax < bx
Слайд 36Флаги регистра флагов
CF – флаг переноса = 1, если предыдущий
операнд не уместился в приемнике после беззнаковой операции
ZF – флаг
нуля = 1, если рез-т пред. команды=0
SF – флаг знака = 1, если результат <0
OF – флаг переполнения = 1, если рез-т предыд. арифм. операции выходит за пределы регистра (для знаковых операций).
PF – флаг четности = 1, если мл.байт рез-та предыд. команды имеет четное число битов=1
AF – вспомогательный флаг переноса = 1 при переносе или заёме из бита 4 результата. (Для двоично-десятичной BCD арифметики).
IF – флаг прерываний = 0, чтобы CPU перестал обрабатывать прерывания от внешних устр-в
DF – флаг направления = 1, чтобы строки команд выполнялись в сторону уменьшения адресов
Слайд 38Управление флагами
ZF – флаг нуля
and al, 0 ; Флаг ZF устанавливается
or al, 1 ;
Флаг ZF сбрасывается
SF – флаг знака числа
or al, 80h ; Флаг SF устанавливается
;старший
бит операнда установлен в 1
and al, 7Fh ; Флаг SF сбрасывается
; старший бит операнда сброшен в 0
Слайд 39Управление флагами
CF – флаг переноса
stc ; Флаг CF устанавливается (Set)
clc ; Флаг CF сбрасывается
(Clear)
OF – флаг переполнения
mov al, 7Fh ; AL = +127
inc
al ; AL = 80h (-128), OF = 1
or al, 0 ; Флаг OF сбрасывается, OF=0
Слайд 40Управление флагами
DF – флаг направления
cld
; сбрасывает флаг, т.е.
DF = 0
std ; устанавливает флаг, т.е. DF = 1
; для цепочечных операций
IF - флаг прерывания
cli ; IF=0 (запрет прерывания)
sti ; IF=1 (разрешает прерывания)
Слайд 41Управление флагами
LAHF – загрузка (Load) младшего байта регистра флагов в
регистр AH
SAHF – сохраняет (Save) содержимое регистра AH в младшем
байте регистра флагов. При этом биты 1, 3, 5 регистра AH игнорируются.