Арифметические команды

Это команды, оперирующие со словными (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. Команда “заканчивает опрос”.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: