|
4.
Инструкции обработки бит
Процессоры 8086 и 8088 имеют 3 группы инструкций для
обработки бит в форматах байта или слова: логические, сдвиги
и вращения (все операции выполняются и над байтами, и над
словами).
4.1. Логические инструкции.
Логические инструкции включают булевы операторы НЕ,
И, включающие ИЛИ, исключающие ИЛИ и операцию тестирования,
которая устанавливает флаги, но не изменяет значения
своих операндов.
Инструкции AND, OR, XOR и TEST следующим образом
влияют на флаги. Флаги OF и CF логическими инструкциями
всегда устанавливается в 0, а состояние флага AF не
определено. Состояния флагов SF, ZF, и PF отражают результат
операции и могут анализироваться инструкциями условного
перехода (п.6.2). Интерпретация этих флагов такая же, как
для арифметических инструкций. Флаг SF устанавливается в 1,
если результат отрицателен (старший бит равен 1), и
устанавливается в 0, если результат положителен (старший бит
равен 0). Флаг ZF устанавливается в 1, если результат равен
0, и устанавливается в 0 в противном случае. Флаг PF
устанавливается в 1, если результат содержит четное число
единиц, и устанавливается в 0 в противном случае. Инструкция
NOT на состояния флагов не влияет.
NOT приемник ОТРИЦАНИЕ
------------
Инструкция NOT инвертирует все биты (формирует
дополнение до 1) байта или слова.
AND приемник,источник ЛОГИЧЕСКОЕ И
---------------------
Инструкция AND выполняет операцию логическое И двух
- 22 -
операндов (байтов или слов) и возвращает результат в
операнд-приемник. Бит результа устанавливается в 1, если
установлены в 1 оба соответствуюших ему бита операндов, и
устанавливается в 0 в противном случае.
OR приемник,источник ВКЛЮЧАЮЩЕЕ ИЛИ
--------------------
Инструкция OR выполняет операцию логическое включающее
ИЛИ двух операндов (байтов или слов) и помещает результат на
место операнда-приемника. Бит результата устанавливается в
1, если равен 1 хотя бы один из 2-х соответствующих ему
битов операндов, и устанавливается в 0 в противном случае.
XOR приемник,источник ИСКЛЮЧАЮЩЕЕ ИЛИ
---------------------
Инструкция XOR выполняет операцию логическое
исключающее ИЛИ 2-х операндов и помещает результат на место
операнда-приемника. Бит результата устанавливается в 1, если
соответствующие ему биты операндов имеют противоположные
значения, и устанавливается в 0 в противном случае.
TEST приемник,источник ТЕСТИРОВАНИЕ
----------------------
Инструкция TEST выполняет операцию логическое И двух
операндов (байтов или слов), модифицирует флаги, но
результат не возвращает, т.е.операнды не изменяются. Если за
TEST следует инструкция JNZ (переход, если не 0), то переход
будет иметь место, если в обоих операндах имеются единицы в
совпадающих позициях.
4.2. Сдвиги.
Биты в байтах или словах могут быть сдвинуты
арифметически или логически. В соответствии с кодируемым в
инструкции счетчиком может быть выполнено до 255 сдвигов.
Счетчик может быть специфицирован как константа 1 или как
регистр CL, что позволяет задавать величину сдвига в
процессе работы программы. Арифметические сдвиги могут быть
использованы для умножения и деления двоичных чисел на
степени 2 (см. SAR). Логические сдвиги могут применяться для
выделения битов в байтах или словах.
- 23 -
Инструкции сдвига следующим образом воздействуют на
флаги. Состояние флага AF всегда не определено после
операции сдвига. Воздействие на флаги PF, SF и ZF аналогично
логическим инструкциям. Флаг CF всегда содержит значение
последнего сдвинутого за пределы операнда приемник бита.
Состояние флага OF после многобитного сдвига всегда не
определено. При единичном сдвиге OF установливается в 1,
если в реэультате операции знаковый бит изменил свое
значение, и устанавливается в 0 в противном случае.
SHL/SAL приемник,счетчик СДВИГ ВЛЕВО
------------------------
Инструкции SHL и SAL выполняют операции соответственно
логического и арифметического сдвига влево операнда
приемник на величину бит, определяемую счетчиком. Приемник
может быть байтом или словом. Появляющиеся справа биты
заполняются нулями. Если знаковый бит сохраняет
первоначальное значение, флаг OF устанавливается в 0.
SHR приемник,источник ЛОГИЧЕСКИЙ СДВИГ ВПРАВО
---------------------
Инструкция SHR сдвигает биты операнда приемник (байта
или слова) вправо на число разрядов, определяемое операндом
счетчик. Появляющиеся слева биты заполняются нулями. Если
знаковый бит сохраняет свое первоначальное значение, флаг OF
устанавливается в 0.
SAR приемник,счетчик АРИФМЕТИЧЕСКИЙ СДВИГ ВПРАВО
---------------------
Инструкция SAR сдвигает биты операнда приемник (байта
или слова) вправо на число разрядов, определяемое операндом
счетчик. Биты, равные первоначальному знаковому биту,
появляются слева, сохраняя таким образом первоначальный знак
числа. Отметим, что результат выполнения SAR отличается от
делимого "эквивалентной" операции IDIV, если операнд
приемника отрицателен и за его пределы сдвигаются единицы.
Например, сдвиг числа -5 вправо на 1 бит дает -3, а деление
-5 на 2 дает -2. Различие инструкций заключается в том, что
IDIV округляет все числа по направлению к 0, а SAR округляет
положительные числа к 0 и отрицательные - от нуля.
- 24 -
4.3. Вращения.
Биты в байтах и словах можно вращать. Биты,
сдвигаемые за пределы операнда, не теряются, как при
сдвиге, а циклически появляются с другой стороны операнда.
Как при сдвиге, величина вращения задается операндом
счетчик, который может быть специфицирован как константа 1
или как регистр CL. Флаг CF может выступать как расширение
операнда в двух инструкциях вращения (RCL и RCR), позволяя
выделять бит во флаг CF и затем проверить его значение
инструкциями JC или JNC. Вращения воздействуют только на
флаг переноса CF и флаг переполнения OF. Флаг CF всегда
содержит значение последнего вышедшего за операнд бита. В
многопозиционных вращениях состояние флага OF всегда
неопределено. В одиночном вращении OF устанавливается в 1,
если операция изменяет значение старшего (знакового) бита
операнда, и устанавливается в 0 в противном случае.
ROL приемник,счетчик ВРАЩЕНИЕ ВЛЕВО
--------------------
Инструкция ROL вращает байт или слово приемника влево
на число бит, определяемое счетчиком.
ROR приемник,счетчик ВРАЩЕНИЕ ВПРАВО
--------------------
Инструкция ROR работает аналогично ROL, но вправо.
RCL приемник,счетчик ВРАЩЕНИЕ ВЛЕВО С ПЕРЕНОСОМ
--------------------
Инструкция RCL вращает биты байта или слова приемника
влево на число бит, определяемое счетчиком. Флаг CF
рассматривается как часть приемника, т.е. его значение при
этом вращении попадает в младший бит приемника, а сам CF
принимает значение старшего бита приемника.
RCR приемник,счетчик ВРАЩЕНИЕ ВПРАВО С ПЕРЕНОСОМ
--------------------
Инструкция RCR работает в точности как RCL с той лишь
разницей, что биты вращаются вправо.
© KOAP
Open Portal 2000
|
|