Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
97
Добавлен:
11.02.2014
Размер:
310.27 Кб
Скачать

Битовые команды

Битовые команды рассматривают свои операнды не в виде привычных уже байтов, слов и двойных слов, в виде последовательности битов. Эти команды реализуют логические операции и команды сдвигов.

Логические операции (или булевы команды) - как, следует из названия, выполняют логические операции - отрицание, конъюнкцию, дизъюнкцию и им присуще ряд черт.

Инвертировать

not opr

"И" (конъюнкция)

and dst,src

Логическое сравнение

test opr1,opr2

"ИЛИ" (дизъюнкция)

or dst,src

"Исключающее ИЛИ"

xor dst,src

Команда not на флаги не действует и работает по следующему принципу. Например:

mov al, 1100b ;al=00001100b

not al ;al=11110011b

Все остальные команды сбрасывают CF и OF, а флаги SF, ZF, PF изменяют по обычным правилам.

Команда and производит поразрядное логическое умножение операндов и записывает результат на место первого операнда. Например:

mov al, 1100b ;al=00001100b

and al, 1010b ;al=00001000b

Команда проверка test, аналог предыдущей команды, но результат логического умножения никуда не записывается, основное назначение - установка флагов, особенно флаг нуля ZF.

mov bh, 1100b

test bh, 0011b ;al=00000000b  ZF=1

test bh, 1010b ;al=00001100b  ZF=0

Команда or производит поразрядное логическое сложение операндов и записывает результат на место первого операнда. Например:

mov al, 1100b ;al=00001100b

or al, 1010b ;al=00001110b

Команда xor производит поразрядное логическое сложение операндов и записывает результат на место первого операнда. Данная операция соответствует фразе " или то, или другое, но не то и не другое одновременно", т.е. если биты совпадают, записывается 0, иначе 1.

mov cl, 1100b

xor cl, 1010b ;al=00000110b

xor cl, cl ;cl=00000000b

Команды сдвига - эти команды перемещают содержимое ячейки влево или вправо. Одним из операндов этих команд является количество сдвигов cnt. Оно либо равно 1, либо определяется содержимым регистра CL (при этом CL сохраняет своё содержимое после операции).

Логические сдвиги - команды сдвига, где участвуют все биты первого операнда, при этом бит, уходящий за пределы ячейки, заносится в флаг CF, а с другого конца в операнд добавляется ноль.

Логический сдвиг влево (shift left): SHL

Логический сдвиг вправо (shift right): SHR

Например:

mov al, 01000111b

shl al,1 ;CF=0, al=10001110b

mov al, 01000111b

shr al,1 ;CF=1, al=00100011b

mov bh, 0011100b

mov cl,3

shl bh,cl ;CF=1, al=11000000b

Арифметические сдвиги - предназначены для реализации быстрого умножения и деления знаковых чисел на степени двойки.

Арифметический сдвиг влево (shift arithmetic left): SAL

Арифметический сдвиг вправо (shift arithmetic right): SAR

Например:

mov ah,10001110b

sar ah,1 ;CF=0, al=11000111b

mov ah,10001110b

sal ah,1 ;CF=1, al=0011100b

Примечание. Команда sal при трансляции будет воспринята как shl, так как это разные мнемонические названия одной и той машинной команды.

Циклические сдвиги. Особенность циклических сдвигов в том, что "уходящий" бит не теряется, а возвращается в операнд, но с другого конца.

Циклический сдвиг влево (shift arithmetic left): ROL

Циклический сдвиг вправо (shift arithmetic right): ROR

Например:

mov ah,11000011b

rol ah,1 ;CF=1, al=10000111b

mov ah,11100010b

ror ah,1 ;CF=0, al=01110001b

Соседние файлы в папке лабораторные работы по ASSAMBLER