Скачиваний:
54
Добавлен:
21.02.2014
Размер:
628.74 Кб
Скачать

7.2.Команды арифметических и логических операций (в том числе и операций над признаками)

7.2.1.Общие сведения.

Микроконтроллер 1816 выполняет операции сложения, инкремента и декремента, сдвигов, конъюнкции, дизъюнкции и т.д. над непосредственным операндом, содержимым аккумулятора, регистров или ячеек памяти. В МК 1816 нет команд вычитания, что приводит к необходимости ее замены последовательностью операций: получение дополнительного кода содержимого аккумулятора, суммирование числа с содержимым аккумулятора и вычисление дополнительного кода результата. Все более сложные операции (умножение, деление, возведение в степень и т. д.) выполняются по подпрограммам.

7.2.2.Команды группы арифметических операций

Изменяют состояние регистра признаков. Из множества признаков результата операции для пользователя программно-доступны только четыре признака: перенос, вспомогательный перенос, а также признаки F0 и F1, функциональное назначение которых специфицируется программистом. Признак F0, кроме того, доступен через слово состояния программы, формат которого показан на рисунке.

ADD A,Rr - Прибавить содержимое регистра к аккумулятору

"0110'1rrr", "6*"

(А) <-- (A) + (Rr); где r = {0 ÷ 7}

ADD A,#d - Прибавить непосредственный операнд к аккумулятору

"0000'0011", "03" [d0 - d7 ]

(A) <-- (A) + d

ADD A,@Rr - Прибавить содержимое ячейки памяти к аккумулятору

"0110'000r", "60" для R0 и "61" для R1

(А) <-- (A) + ((Rr)) где r = {0 ÷ 7}

ADDC A,Rr - Прибавить признак переноса и содержимое

регистра к аккумулятору

"0111'1rrr", "7*"

(А) <-- (A) + (Rr) + (С) где r = {0 ÷ 7}

ADDC A,#d - Прибавить признак переноса и непосредственный

операнд к аккумулятору

"0001'0011", "13"

(А) <-- (A) + d + (С)

ADDC A,@Rr - Прибавить признак переноса и содержимое памяти

к аккумулятору

"0111'000r", "70" для R0 и "71" для R1

(А) <-- (A) + ((Rr)) + (С)

DAA - Команда десятичной коррекции аккумулятора

"0101'0111", "57"

Это безопасная команда используется после команды двоичного сложения десятичных двоично-кодированных чисел с целью формирования результата сложения по правилам десятичной арифметики. Коррекция выполняется следующим образом:

если в младшей тетраде зафиксирован результат больше 9 или если признак вспомогательного переноса равен 1, то к содержимому аккумулятора добавляется корректирующее число 6;

далее выполняется проверка старшей тетрады байта, и досуммирование числа 6 производится, если число в битах 4-7 превышает 9 или если признак С равен 1.

При переполнении в результате коррекции признак С устанавливается в 1.

INC A - Инкремент содержимого аккумулятора

"0001'0111", "17"

(А) <-- (A) + 1

INC Rr - Инкремент содержимого регистра

"0001'0rrr", "1*"

(Rr) <-- (Rr) + 1; r = {0 ÷ 7}

INC @Rr - Инкремент содержимого ячейки памяти

"0001'000r", "10" для R0 и "11" для R1

((Rr)) <-- ((Rr)) + 1; r = {0 ÷ 7}

DEC A - Декремент содержимого аккумулятора

"0000'0111", "07"

(A) <-- (A) - 1;

DEC Rr - Декремент содержимого регистра

"1100'1rrr", "C*"

(Rr) <-- (Rr) - 1; r = {0 ÷ 7}

RL A - Циклический сдвиг влево содержимого аккумулятора

"1110'0111", "E7"

n+1) <-- (An); (А0) <-- (A7); n = {0 ÷ 7}

RLC A - Циклический сдвиг влево через перенос

"1111'0111", "E7"

n+1) <-- (An); (А0) <-- (C); (C) <-- (A7); n = {0 ÷ 7}

RR A - Циклический сдвиг вправо содержимого аккумулятора

"0111'0111", "77"

n) <-- (An+1); (А7) <-- (A0); n = {0 ÷ 7}

RRC A - Циклический сдвиг влево через перенос

"0110'0111", "67"

n) <-- (An+1); (А7) <-- (C); (C) <-- (A0); n = {0 ÷ 7}

Работу команд RL, RLC, RR и RRC иллюстрирует схема выполнения операций сдвига, показаггая на рисунке ниже

SWAP A - Обменять тетрады в аккумуляторе

"0100'0111", "E7"

4-7) <-- (A0-3);

Пример: неупакованные десятичные двоично-кодированные цифры находятся в ячейках 10 и 31. Требуется упаковать их в ячейку 10.

PACK: MOV R0,#10 ; загрузка регистра R0

MOV R1,#31 ; загрузка регистра R1

XCHD A,@R0 ; обменять биты 0-3 аккумулятора и ячейки 10 памяти

SWAP A ; обменять тетрады в аккумуляторе

XCHD A,@R1 ; обменять биты 0-3 аккумулятора и ячейки 31 памяти

MOV @R0,A ; перечлать А в ячейку 10 памяти

Соседние файлы в папке МП К1816ВЕ4