Арифметические операции
Наименование операции |
Описание |
Сложение |
Вычисление суммы двух операндов |
Вычитание |
Вычисление разности двух операндов |
Умножение |
Вычисление произведения двух операндов |
Деление |
Вычисление частного от деления двух операндов |
Вычисление модуля |
Замена операнда его абсолютным значением (модулем) |
Отрицание |
Изменение знака операнда на противоположный |
Приращение |
Увеличение значения операнда на 1 |
Отрицательное приращение (операция декремента) |
Уменьшение значения операнда на 1 |
В большинстве вычислительных систем на аппаратном уровне выполняются четыре основных арифметических операции — сложение, вычитание, умножение и деление — над целыми числами (числами в формате с фиксированной точкой). В универсальных процессорах в состав набора команд включаются и аналогичные команды для работы с числами в формате с плавающей точкой и числами в двоично-десятичном представлении.
При выполнении команд арифметических операций над операндами, размещенными в памяти, процессору приходится повторять те же действия, что и при пересылке данных. И конечно же, в процессе выполнения арифметических команд самое непосредственное участие принимает АЛУ.
Логические операции
Наименование операции |
Описание |
И |
Поразрядная булева операция конъюнкции двух операндов |
ИЛИ |
Поразрядная булева операция дизъюнкции двух операндов |
НЕ |
Поразрядная булева операция инверсии источника (поразрядное инвертирование) |
Исключающее ИЛИ |
Поразрядная булева операция неравнозначности (суммирования по модулю 2) двух операндов |
Проверка |
Проверка выполнения определенного условия и установка в соответствии с результатом значений флагов |
Сравнение |
Логическое или арифметическое сравнение значений двух операндов; установка одного или нескольких флагов в соответствии с результатом |
Установка управляющих переменных |
Класс машинных команд, устанавливающих определенный режим функционирования процессора с целью защиты, обработки прерывания, управления таймером и т.п. |
Сдвиг |
Поразрядный сдвиг операнда вправо или влево с заполнением освобождающихся разрядов определенной константой |
Циклический сдвиг |
Поразрядный сдвиг операнда вправо или влево с заполнением освобождающихся позиций значениями разрядов, "выталкиваемых" с противоположного конца |
В большинстве процессоров поддерживается довольно обширный набор логических операций над отдельными битами слова или другого адресуемого элемента данных. В качестве базовых при этом используются операции булевой алгебры.
Помимо поразрядных операций булевой алгебры в большинстве процессоров поддерживаются операции сдвигов. Наиболее распространенные операции этой категории представлены на рис. 1. При выполнении операции логического сдвига процесс перемещает содержимое элемента данных в разрядной сетке влево или вправо, причем "выталкиваемые" с одного конца разряды теряются, а позиция, освободившаяся на другом конце разрядной сетки, заполняется кодом 0. Операция логического сдвига используется, в основном, для выделения "в чистом виде" содержимого определенного поля внутри слова.
Рис. 1. Варианты операций сдвига: а — логический сдвиг вправо; б — логический сдвиг влево; в — арифметический сдвиг вправо; г — арифметический сдвиг влево; д — циклический сдвиг вправо; е — циклический сдвиг влево.
При выполнении операции арифметического сдвига операнд интерпретируется как целое число со знаком, а потому знаковый разряд не сдвигается. При сдвиге вправо знаковый разряд дублируется в освобождающемся старшем значащем разряде. С помощью операции арифметического сдвига можно ускорить выполнение арифметических операций умножения и деления при определенных значениях операндов. В частности, сдвиг влево на несколько разрядов числа в дополнительном коде есть не что иное, как умножение на соответствующую степень числа 2, а сдвиг вправо — деление на степень числа 2. Естественно, что при умножении нужно следить за тем, чтобы не возникло переполнение, а при делении — за тем, чтобы не была утеряна значимость.
Операция циклического сдвига сохраняет все биты операнда, но при этом переставляет их в другие позиции разрядной сетки. Чаще всего эту операцию используют для того, чтобы поочередно устанавливать биты операнда в самую левую (или самую правую позицию) разрядной сетки. Опрос самой левой позиции производится командами анализа знака операнда и, таким образом, можно проанализировать значения отдельных битов элемента данных.
