Арифметические
операции на языке ассемблера выполняются над целыми числами четырех типов:
Беззнаковыми
двоичными, знаковыми двоичными, упакованными десятичными и неупакованными
десятичными.
В
данной лабораторной работе рассматриваются арифметические операции над
беззнаковыми числами.
Используются
следующие команды:
ADD – сложить, SUB – вычесть.
Описание
команд: Работают с 8 и 16 битовыми операндами, инструкция ADD выполняет сложение операнда источника (правого операнда) с
содержимым операнда приемника (левый операнд), результат помещается в операнд
приемник. Инструкция SUB делает тоже самое, только она
вычитает операнд источник из операнда приемника, результат помещается в
операнд приемник. Операндами могут быть регистры, константы, ячейки памяти в
различных комбинациях, но нельзя добавить (вычесть) значение одной ячейки
памяти к другой, а также в качестве операнда источника использовать константу
(непосредственное значение). Команда воздействует на шесть флагов: AF, CF, OF,
PF, SF, ZF.
Например,
флаг переноса CF=1 если результат действия не
помещается в операнде приемнике, в противном случае CF=0.
MUL - умножить.
Описание
команд: инструкция MUL перемножает 8 и 16 битовые
беззнаковые множители, создавая 16 или 32 битовое произведение. При 8 битовом
произведении один из операндов в регистре AL
другой может быть 8 битовым регистром общего назначения или переменной памяти
соответствующего назначения. Результат помещается в регистр AX (16 битовый). При 16 битовых множителях один из
сомножителей в 16 битовом регистре общего назначения другой в переменной
памяти, 32 битовый результат в регистрах DX:AX. При этом младшие 16 бит в AX старшие в DX.
Команда
воздействует на два флага: CF, OF.
DIV – разделить.
Описание
команд: позволяет разделить 32 битовое значение на 16 битовое значение или 16
битовое на 8 битовое. При делении 16 битового значения делимое помещается в AX, 8 битовый делитель помещается в регистр или в переменную
соответствующего размера. Результат (8 битовый) помещается в AL, остаток в AH.
Состояние
флагов не определено, но если частное не помещается в регистре AL (AX) процессор генерирует прерывание
типа 0 (деление на 0). В заданиях используются директивы и команды, изученные в
предыдущих лабораторных работах.
БИТОВЫЕ КОМАНДЫ
Битовые
команды рассматривают свои операнды не в виде привычных уже байтов, слов и
двойных слов, в виде последовательности битов. Эти команды реализуют логические
операции и команды сдвигов.
Логические
операции (или булевы команды) – как, следует из названия, выполняют логические
операции – отрицание, конъюнкцию, дизъюнкцию и им присуще ряд черт.
Команда
not на флаги не действует и работает
по следующему принципу. Например:
Все
остальные команды сбрасывают CF и OF,
а флаги SF, ZF,
PF изменяют по обычным правилам.
Команда
and производит поразрядное логическое
умножение операндов и записывает результат на место первого операнда. Например:
Команда
test, аналог предыдущей команды, но результат
логического умножения никуда не записывается, основное назначение – установка
флагов, особенно флаг нуля ZF.
Команда
or производит поразрядное логическое
сложение операндов и записывает результат на место первого операнда. Например:
Команда
xor производит поразрядное логическое
сложение операндов и записывает результат на место первого операнда. Данная
операция соответствует фразе «или то, или другое, но не то и не другое», т.е.
если биты совпадают, записывается 0, иначе 1.
Команды
сдвига – эти
команды перемещают содержимое ячейки влево или вправо. Одним из операндов этих
команд является количество сдвигов cnt. Оно
либо равно 1, либо определяется содержимым регистра CL (при этом CL сохраняет своё содержимое после
операции).
Логические
сдвиги – команды
сдвига, где участвуют все биты первого операнда, при этом бит, уходящий за
пределы ячейки. Заносится в флаг СА, а с другого конца в операнд добавляется
ноль.
Арифметические
сдвиги –
предназначены для реализации быстрого умножения и деления знаковых чисел на
степени двойки.
Примечание: команда sal при трансляции будет воспринята как shl, так кА это разные мнемонические названия одной и той
машинной команды.
Циклические
сдвиги.
Особенность циклических сдвигов в том, что «уходящий» бит не теряется, а
возвращается в операнд, но с другого конца.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.