# Типы команд обработки данных
Арифметические
- сложение
- сравнения кодов
- умножения и деления
- команды десятичной арифметики
Базовые арифметические команды предназначены для задания арифметических операций над какими-то операндами. Любая арифметическая операция двухместная. Команды арифметических операций формируют практически всегда признаки результата операций. Базовой арифметической операцией является арифметическое сложение (сложение двоичных кодов, т.к. сложение без знаковое). Большинство ЭВМ не ограничиваются операцией сложения, имеется еще вычитание двоичных кодов . Эта операция не коммутативная. Сама по себе команда вычитания двоичных кодов обеспечивает вычитание без знаковых кодов. Но сформулировав должным образом коды можно и обрабатывать данные со знаком. Если обрабатывать многобайтные данные, то т.к. система счисления двоичная позиционная, то обработка начинается с младшего разряда. Если в арифметических операциях могут участвовать операнды разной длины, то предварительно короткий операнд увеличивается до длины длинного (для целочисленной арифметики), причем здесь идет выравнивание по правому краю, а расширение идет с помощью знака. Как правило, расширение команды происходит в фиксированном регистре, следовательно, эти команды безадресные. Если этого нет, нужно писать специальные процедуры расширения. Операция сравнения кодов. По содержанию это команда вычитания. Фактически схема вычисления (dst)-(src). Все признаки результата по этой команде формируются, а результат никуда не заносится. Однооперандные арифметические команды. Т.к. второй операнд имеет фиксированное значение (как правило, оно = 1), тогда команды INC dst; DEC dst; , а схемы вычислений dst:=(dst) ±1. Эти команды очень используемы при разработке счетчиков, индексов. Не применимы для многобайтных данных, позволяют сохранить признаки для следующих ветвлений. Команды умножения и деления. В системах команд малых ЭВМ эти команды отсутствуют, но если в системе команд имеются эти команды, то они применяются для беззнаковых данных. Для хранения произведения обычно используются фиксированные регистры, чаще всего это аккумулятор с расширителем. Аналогично для целочисленного деления. В общем случае делимое имеет двойную длину, следовательно, как правило, приемник результата тоже фиксированный регистр (аккумулятор с расширителем). Очень часто в системах команд вводят команды умножения и деления с учетом знака. Эти команды обычно ориентированны на использование базовых форматов компьютера. Для обработки многобайтных данных при умножении и делении, сначала делают декомпозицию, а затем строить умножение или деление многобайтных данных. Если машина ориентирована на научно технические расчеты, то требуются операции над данными с плавающей запятой и там они имеются. Говоря о малых ЭВМ, то, собственно говоря, команд с плавающей арифметикой нет. Но операция сложения и вычитания выполняются подпрограммами или с помощью подпроцессора. Команды десятичной арифметики. Основу десятичной арифметики в любых ЭВМ составляют команды двоичной арифметики. Обычно к эти командам относят команды десятичной коррекции. Обычно эти команды зависят от того, какой формат используется (упакованный или неупакованный). Не зависимо от формата, команды основаны на аккумуляторном способе (т.е. команды десятичной коррекции безадресные). В этом случае десятичная обработка состоит из двух фаз: 1) соответствующее двоичное действие 2) коррекция с учетом десятичного числа.
Логические
- маскирование и выделение определенных разрядов операндов (&)
- формирование требуемых значений в требуемых битах (с помощью ∪).
- инвертирование определенных битов (с помощью ⊕)
Логические команды в системе команд ЭВМ играют не только вспомогательную роль, но в логических задачах могут быть основными операторами обработки. Для этого система логических операций в ЭВМ должна быть функционально полной. Как правило, а систему команд закладываются избыточные логические операции. Операции выполняются побитно и одновременно справа на лево. Команды логической обработки одно и двух операндные. Двухоперандные логические операции реализуют: &, ∪, ⊕. Логические операции избирательно действуют на флаги, т.е. часть флагов после выполнения операции не изменяются, некоторые могут иметь неопределенное значение. В следствии выполнения этой операции, результат никуда не записывается, но формируются все флаги.
Команды сдвига
- вид сдвига (арифметический или логический)
- направление сдвига
- характер сдвига (простой или циклический)
- по количеству разрядов, на которое сдвигается операнд после выполнения операции.