Это команды, оперирующие со словными (RW1, RW2), байтными (RB1, RB2), вещественными (RG1, RG2) аккумуляторами и словными, байтными, вещественными операндами.
Арифметические команды позволяют производить арифметические действия над беззнаковыми и знаковыми целыми числами, над вещественными числами. Команды, работающие с аккумуляторами RB1, RB2, введены для совместимости с системой команд контроллеров С100, С200 и не рекомендуются к использованию в новых программах.
1) +W - сложение аккумуляторов RW1 и RW2.
Формат команды: +W.
Аккумулятор RW1 складывается с аккумулятором RW2. Результат помещается в RW1. Флаг ZF устанавливается в 1, если результат равен 0, иначе сбрасывается в 0. Флаг CF устанавливается в 1, если происходит переполнение, иначе сбрасывается в 0. При сложении знаковых чисел, если результат вне диапазона, то флаг OF устанавливается в 1, иначе сбрасывается в 0. Флаг PF устанавливается в 1, если результат содержит четное количество бит, равных 1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
|
|
2) -W - вычитание аккумулятора RW1 из аккумулятора RW2.
Формат команды: -W.
Аккумулятор RW1 вычитается из аккумулятора RW2. Результат помещается в RW1. Флаг ZF устанавливается в 1, если результат равен 0, иначе сбрасывается в 0. Флаг CF устанавливается в 1, если происходит заем, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1, иначе сбрасывается в 0. Флаг PF устанавливается в 1, если результат содержит четное количество бит, равных 1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
3) ADW - сложение аккумулятора RW1 с константой.
Формат команды:
ADW КНхххх | Сложение аккумулятора RW1 с константой в шестнадцатиричном формате; |
ADW KFxxxxx | Сложение аккумулятора RW1 с знаковой константой в десятичном формате; |
ADW KUxxxxx | Сложение аккумулятора RW1 с беззнаковой константой в десятичном формате; |
ADW КВххх | Сложение аккумулятора RW1 с беззнаковой константой в десятичном формате; |
Аккумулятор RW1 складывается с константой. Результат помещается в RW1. Флаг ZF устанавливается в 1, если результат равен 0, иначе сбрасывается в 0. Флаг CF устанавливается в 1, если происходит переполнение, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1, иначе сбрасывается в 0. Флаг PF устанавливается в 1, если результат содержит четное количество бит, равных 1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
4) DDW - вычитание константы из аккумулятора RW1.
|
|
Формат команды:
DDW КНхххх | вычитание из аккумулятора RW1 константы в шестнадцатиричном формате; |
DDW KFxxxxx | вычитание из аккумулятора RW1 знаковой константы в десятичном формате; |
DDW KUxxxxx | вычитание из аккумулятора RW1 беззнаковой константы в десятичном формате; |
Из аккумулятора RW1 вычитается константа. Результат помещается в RW1. Флаг ZF устанавливается в 1, если результат равен 0, иначе сбрасывается в 0. Флаг CF устанавливается в 1, если происходит переполнение, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1. Флаг PF устанавливается в 1, если результат содержит четное количество бит, равных 1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
5) INRW - инкремент (увеличение на 1) аккумулятора RW1.
Формат команды: INRW.
Содержимое аккумулятора RW1 увеличивается на единицу. Флаг ZF устанавливается в 1, если результат равен 0, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1. Флаг PF устанавливается в 1, если результат содержит четное количество бит, равных 1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, SF, PF, OF. Команда “заканчивает опрос”.
6) DCRW - декремент (уменьшение на 1) аккумулятора RW1.
Формат команды: DCRW.
Содержимое аккумулятора RW1 уменьшается на единицу. Флаг ZF устанавливается в 1, если результат равен 0, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1. Флаг PF устанавливается в 1, если результат содержит четное количество бит, равных 1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, SF, PF, OF. Команда “заканчивает опрос”.
7) IW - инкремент младшего байта аккумулятора RW1.
Формат команды: IW n, где n = 0...255.
Содержимое младшего байта аккумулятора RW1 инкрементируется n раз без переноса в старший байт. Если младший байт результата равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Флаг CF устанавливается в 1 при переполнении младшего байта RW1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
8) DW - декремент младшего байта аккумулятора RW1.
Формат команды: DW n, где n = 0...255.
Содержимое младшего байта аккумулятора RW1 декрементируется n раз без заема из старшего байта. Если младший байт результата равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Флаг CF устанавливается в 1 при заеме, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
9) *W -беззнаковое умножение аккумулятора RW1 на аккумулятор RW2.
Формат команды: *W.
Содержимое аккумулятора RW1 умножается на аккумулятор RW2. Результат помещается в RW1. Если есть переполнение, то флаги CF и OF устанавливаются в 1, иначе сбрасываются в 0. Команда изменяет аккумуляторы RW1, RW2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
10) *ZW - знаковое умножение аккумулятора RW1 на аккумулятор RW2.
Формат команды: *ZW.
Содержимое аккумулятора RW1 умножается на аккумулятор RW2. Результат помещается в RW1. Если есть переполнение, то флаги CF и OF устанавливаются в 1, иначе сбрасываются в 0. Команда изменяет аккумуляторы RW1, RW2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
11) /W - беззнаковое деление аккумулятора RW2 на аккумулятор RW1.
Формат команды: /W.
Содержимое аккумулятора RW1 делится на аккумулятор RW2. Частное помещается в RW1, а остаток - в RW2. Если есть “деление на 0”, то флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы RW1, RW2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
12) /ZW - знаковое деление аккумулятора RW2 на аккумулятор RW1.
Формат команды: /ZW.
Содержимое аккумулятора RW1 делится на аккумулятор RW2. Частное помещается в RW1, а остаток - в RW2. Знак остатка равен знаку делимого. Если есть “деление на 0”, то флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы RW1, RW2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
|
|
13) KZW - изменение знака аккумулятора RW1.
Формат команды: KZW.
Изменяется знак аккумулятора RW1 на противоположный. Результатом этой операции можно считать преобразование аккумулятора RW1 в дополнительный код. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
14) KZR - беззнаковое преобразование аккумулятора RW1 (8 -> 16).
Формат команды: KZR.
Содержимое аккумулятора RW1 преобразуется из восьмиразрядного беззнакового числа в младшем байте аккумулятора RW1 в шестнадцатиразрядное беззнаковое число в аккумуляторе RW1. Команда изменяет аккумулятор RW1. Команда “заканчивает опрос”.
15) KZRZ - знаковое преобразование аккумулятора RW1 (8 -> 16).
Формат команды: KZRZ.
Содержимое аккумулятора RW1 преобразуется из восьмиразрядного знакового числа в младшем байте аккумулятора RW1 в шестнадцатиразрядное знаковое число в аккумуляторе RW1. Команда изменяет аккумулятор RW1. Команда “заканчивает опрос”.
16) TSTW1 - анализ аккумулятора RW1.
Формат команды: TSTW1.
Анализируется содержимое аккумулятора RW1. Флаги CF и OF устанавливаются в 0. Если аккумулятор RW1 равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Если знаковый RW1 меньше 0, то флаг SF устанавливается в 1, иначе сбрасывается в 0. Если RW1 содержит четное количество бит, равных 1, то флаг PF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет только регистр флагов F. Команда “заканчивает опрос”.
17) TSTW2 - анализ аккумулятора RW2.
Формат команды: TSTW2.
Анализируется содержимое аккумулятора RW2. Флаги CF и OF устанавливаются в 0. Если аккумулятор RW2 равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Если знаковый RW2 меньше 0, то флаг SF устанавливается в 1, иначе сбрасывается в 0. Если RW2 содержит четное количество бит, равных 1, то флаг PF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет только регистр флагов F. Команда “заканчивает опрос”.
|
|
18) +G - сложение аккумуляторов RG1 и RG2.
Формат команды: +G.
Аккумулятор RG1 складывается с аккумулятором RG2. Результат помещается в RG1. Если есть переполнение, то флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы LA, RW1, RW2, RG1, RB1, RB2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
19) -G - вычитание аккумулятора RG1 из RG2.
Формат команды: -G.
Аккумулятор RG1 вычитается из аккумулятора RG2. Результат помещается в RG1. Если есть заем, то флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы LA, RW1, RW2, RG1, RB1, RB2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
20) *G - умножение аккумулятора RG1 на RG2.
Формат команды: +G.
Аккумулятор RG1 умножается на аккумулятор RG2. Результат помещается в RG1. Если есть переполнение, то флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы LA, RW1, RW2, RG1, RB1, RB2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
21) /G - деление аккумулятора RG2 на RG1.
Формат команды: /G.
Аккумулятор RG2 делится на аккумулятор RG1. Результат помещается в RG1. Если есть переполнение или “деление на 0”, то флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы LA, RW1, RW2, RG1, RB1, RB2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
22) +B - сложение аккумуляторов RB1 и RB2.
Формат команды: +B.
Аккумулятор RB1 складывается с аккумулятором RB2. Результат помещается в RB1. Если результат равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Если есть переполнение, то флаг CF устанавливается в 1, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1. Команда также изменяет аккумуляторы LA, RB1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
23) -B - вычитание аккумулятора RB1 из RB2.
Формат команды: -B.
Из аккумулятора RB1 вычитается аккумулятор RB2. Результат помещается в RB1. Если результат равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Если есть заем, то флаг CF устанавливается в 1, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1. Команда также изменяет аккумуляторы LA, RB1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
24) INRB - инкремент (увеличение на 1) аккумулятора RB1.
Формат команды: INRB.
Содержимое аккумулятора RB1 увеличивается на единицу. Если результат равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы RB1, LA и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
25) DCRB - декремент (уменьшение на 1) аккумулятора RB1.
Формат команды: DCRB.
Содержимое аккумулятора RB1 уменьшается на единицу. Если результат равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы LA, RB1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
26) IB - инкремент младшего байта аккумулятора RB1.
Формат команды: IB n, где n = 0...255.
Содержимое младшего байта аккумулятора RB1 инкрементируется n раз без переноса в старший байт. Если результат равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. При переполнении флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы LA, RB1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
27) DB - декремент младшего байта аккумулятора RB1.
Формат команды: DB n, где n = 0...255.
Содержимое младшего байта аккумулятора RB1 декрементируется n раз без заема из старшего байта. Если результат равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. При заеме флаг CF устанавливается в 1, иначе сбрасывается в 0 Команда изменяет аккумуляторы LA, RB1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
28) KZB - изменение знака аккумулятора RB1.
Формат команды: KZB.
Изменяется знак аккумулятора RB1 на противоположный. Результатом этой операции можно считать преобразование аккумулятора RB1 в дополнительный код. Команда изменяет аккумуляторы LA, RB1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
29) TSTB1 - анализ аккумулятора RB1.
Формат команды: TSTB1.
Анализируется содержимое аккумулятора RB1. Флаги CF и OF устанавливаются в 0. Если RB1 равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Если знаковый RB1 меньше 0, то флаг SF устанавливается в 1, иначе сбрасывается в 0. Если RB1 содержит четное количество бит, равных 1, то флаг PF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет только регистр флагов F. Команда “заканчивает опрос”.
30) TSTB2 - анализ аккумулятора RB2.
Формат команды: TSTB2.
Анализируется содержимое аккумулятора RB2. Флаги CF и OF устанавливаются в 0. Если RB2 равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Если знаковый RB2 меньше 0, то флаг SF устанавливается в 1, иначе сбрасывается в 0. Если RB2 содержит четное количество бит, равных 1, то флаг PF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет только регистр флагов F. Команда “заканчивает опрос”.