INC 30H ; Инкремент содержимого ячейки памяти с адресом 30H
INC B ; Инкремент регистра B
MOV R0, #38H ; Загрузить в регистр R0 число 38H (адрес ячейки ПД)
INC @R0 ; Инкремент содержимого ячейки 38H
INC DPTR ; Инкремент регистра DPTR
NOP
Занесите исходные данные в регистры: (A) = 10H, (R2) = FFH, (B) = 88H, (DPTR) = 1011H, ячейки памяти данных: (30H) = 33H, (38H) = 55H.
Выполните программу в пошаговом режиме, наблюдая за изменением содержания регистров, ячеек памяти и флагов МК. Сделайте выводы о влиянии команд инкремента на флаги МК.
3.4. Команды декремента
Микроконтроллеры семейства МК51 имеют следующие команды декремента:
DEC A ; (A) ß (A) – 1 - Декремент аккумулятора
DEC Rn ; (Rn) ß (Rn) – 1 - Декремент регистра
DEC ad ; (ad) ß (ad) – 1 - Декремент прямоадресуемого байта
DEC @Ri ; ((Ri)) ß ((Ri)) – 1 - Декремент байта из памяти данных
Команды декремента не влияют на флаги МК (за исключением DEC A, которая может изменить флаг паритета P).
Обратите внимание, что в МК51 отсутствует команда декремента регистра-указателя данных DPTR.
3.4.1. Запишите в память симулятора следующие команды:
DEC A ; Декремент аккумулятора
DEC R2 ; Декремент регистра R2
DEC 30H ; Декремент содержимого ячейки памяти с адресом 30H
DEC B ; Декремент регистра B
MOV R0, #38H ; Загрузить в регистр R0 число 38H (адрес ячейки памяти)
DEC @R0 ; Декремент содержимого ячейки ПД с адресом 38H
NOP
Занесите исходные данные в регистры: (A) = 10H, (R2) = 00H, (B) = FFH и ячейки памяти данных: (30H) = AAH, (38H) = 55H.
Выполните программу в пошаговом режиме, наблюдая за изменением содержимого регистров, ячеек памяти и флагов МК. Сделайте выводы о влиянии команд декремента на флаги МК.
3.5. Команда десятичной коррекции аккумулятора
В микроконтроллерах семейства МК51 имеется возможность складывать десятичные числа, представленные в двоично-десятичном коде. Обычно для представления десятичного числа в МК используется так называемый упакованный формат, в котором байт разбивается на две тетрады. При этом младшая тетрада определяет младшую десятичную цифру в двоично-десятичном коде, а старшая тетрада – старшую цифру в двоично-десятичном коде. Диапазон представления десятичных чисел в упакованном формате составляет от 0 до 99. Пример записи чисел в упакованном формате:
1001 0111 = 97,
0010 1000 = 28.
Десятичные двоично-кодированные числа в упакованном формате можно складывать с применением команд сложения ADD и ADDC. Однако после этого требуется проводить коррекцию результата, так как эти команды выполняют сложение по правилам двоичной арифметики.
Коррекция результата сложения выполняется с помощью команды DA A по следующим правилам в 2 этапа:
· на 1-м этапе проводится коррекция младшей тетрады содержимого аккумулятора; при этом, если ее значение получилось более 9 или установлен флаг дополнительного переноса AC = 1, то к содержимому аккумулятора добавляется число 6 (0110 в двоичном коде);
· на 2-м этапе проводится коррекция старшей тетрады; при этом, если ее значение больше 9 или установлен флаг переноса C = 1, то к содержимому старшей тетрады аккумулятора добавляется число 6 (0110 в двоичном коде).
Пример. Пусть в аккумуляторе находится число 79H (десятичное число 79 в упакованном формате). Требуется сложить его с числом 38H (десятичное число 38 в упакованном формате). Команда сложения ADD A, #38H выполняется следующим образом:
Переносы 1 ß 1 ß 1 ß 1 ß 1
0 1 1 1 1 0 0 1
+
0 0 1 1 1 0 0 0
--------------------------------------------------1 0 1 1 0 0 0 1
Полученный результат не является двоично-десятичным кодом.
Выполним коррекцию результата сложения с помощью команды DA A.
На 1-м этапе производим коррекцию младшей тетрады содержимого аккумулятора. Поскольку при сложении был перенос из 3-го разряда, т.е. установлен флаг AC = 1, то к младшей тетраде прибавляется число 6:
1011 0001
+
0110
---------------1011 0111
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.