Состав команд арифметических действий
ADI – C6 – сложить аккумулятор с данными.
ADD L – 85 – сложить содержимое регистра L с содержимым аккумулятора.
ADD H – 84 – сложить содержимое регистра H с содержимым аккумулятора.
ADD М – 86 – сложить содержимое аккумулятора с содержимым ячейки памяти, на которую указывает пара регистров HL.
SUI – Ø6 – вычесть данные из аккумулятора.
SUB L – 95 – вычесть содержимое регистра L из содержимого аккумулятора.
SUB H – 94 – вычесть из содержимого регистра Н в аккумулятор.
SUB М – вычесть данные, расположенные по адресу, на которую указывает пара регистров HL, из аккумулятора.
INR A – 3C – к содержимому аккумулятора +1.
INX H – 23 – инкремент пары регистров HL.
DCR A – 3D – декрементировать (- 1) аккумулятор.
DCX H – 2B – декрементировать пару регистров HL.
CPI – FE – сравнить содержимое аккумулятора с данными (в следующей ячейке памяти).
CMP L – BD – сравнить содержимое аккумулятора с содержимым регистра L.
CMP H – сравнить содержимое аккумулятора с содержимым регистра H.
CMP M – сравнить аккумулятор с ячейкой памяти, на которую указывает пара регистров HL.
Содержит команды сложить, вычесть, инкрементировать, декрементировать и сравнить.
Каждая команда точно оговаривает различные источники другого слагаемого.
Команда ADI – это команда сложить непосредственно, она является двухбайтовой. Ее формат (код операции С6) содержится в первом байте команды, а непосредственно за ним, во втором байте, находятся данные для сложения с содержимым аккумулятора.
Команда ADD L – содержимое аккумулятора (OF) складывается с содержимым регистра L (01). Полученная в результате выполнения команды сумма (10) помещается в аккумулятор.
Команда ADD H – выполняется так же.
Команда ADD М – однобайтовая команда – сложить с косвенным адресом. Адрес второго слагаемого задан в более сложной форме с использованием так называемого способа косвенной регистровой адресации. При такой адресации пара регистров HL указывает 16-тиразрядный адрес памяти, где хранится второе слагаемое.
Команда вычитания SUI.
Рассмотрим, например, 00001001 – 00000001 → Ø9Н – Ø1Н.
Эта операция выполняется следующим образом: осуществляется сложение первого числа и второго, представленного в дополнительном коде.
Дополнительный код FF второго числа складывается с первым числом, что дает сумму 100001000. В старшем девятом бите суммы единица является переполнением и не принадлежит разности 00001000. МП использует это переполнение для установления индикатора переноса CY в регистре состояния. Вычитая, МП инвертирует переполнение, и результат становится содержимым индикатора переноса CY.
Рассмотрим другой пример, когда уменьшаемое меньше вычитаемого: Ø5 – Ø6 = FF = -1(10)
Результат вычитания представлен в дополнительном коде десятичного числа (-1). Сложение в этом случае не вызывает переполнения, т.е. девятый бит равен нулю. Этот бит инвертируется, что дает 1 в индикаторе переноса CY. Когда индикатор CY устанавливается в 1, после вычитания, это означает, что число, содержащееся в аккумуляторе, меньше числа в памяти или регистре. Иначе, индикатор переноса равен 1, указывает на то, что число в аккумуляторе после того, как было выполнено вычитание, является дополнительным кодом, представляя отрицательное число.
Допустим, первое слагаемое 5 находится в аккумуляторе, а второе слагаемое находится в регистре L.
Команда сравнение (СМР) – вычитает содержимое регистра памяти из содержимого аккумулятора, но при этом не изменяет содержимого ни того, ни другого. Индикаторы регистра состояния подвержены воздействию команд сравнения.
Например, сравнить содержимое аккумулятора с содержимым регистра L.
Содержимое регистра L переводим в дополнительный код.
Первое число и дополнительный код второго числа складываются, что дает результат 10000000, затем МП проверяет равенство нулю восьми младших разрядов. Индикатор нуля Z в примере принимает значение 1, переполнение 1 инвертируется и индикатор CY устанавливается в ноль. Сброшенный индикатор CY означает, что содержимое аккумулятора больше либо равно содержимому регистра L.