Однокристальные микроконтроллеры семейства MCS-51
Лабораторная работа № 4
Арифметические команды
1. Цель работы
Изучить и практически исследовать арифметические команды однокристальных микроконтроллеров семейства MCS-51 (МК51) на персональном компьютере.
2.Основные теоретические сведения
В микроконтроллерах семейства МК51 имеются следующие команды двоичной арифметики с 8-разрядными числами:
1) сложение;
2) вычитание;
3) инкремент;
4) декремент;
5) умножение;
6) деление.
Операции сложения и вычитания с 8-разрядными операндами предполагают, что один из операндов размещается в регистре A (аккумуляторе), а другой – либо в регистре, либо в оперативной памяти, либо является непосредственным числом, заданным в самой команде. Вычитание производится всегда из аккумулятора. Результат операции сложения и вычитания всегда записывается в аккумулятор. Кроме того, по результату операций сложения и вычитания устанавливаются биты признаков (флаги): C – переноса, AC – дополнительного переноса, P – паритета, OV – переполнения.
Команды инкремента увеличивают содержимое регистров, ячеек памяти на 1. Команды декремента, наоборот, уменьшают содержимое регистров и ячеек памяти на 1. Эти команды не влияют на флаги МК.
Команды умножения и деления выполняют соответствующие операции над однобайтными целыми числами.
К группе арифметических команд МК51 относится также команда десятичной коррекции аккумулятора, которая служит для коррекции результата при сложении десятичных двоично-кодированных чисел.
При рассмотрении арифметических команд будем предполагать, что операнды – двоичные целые числа без знака. Выполнение арифметических операций с дробными числами, а также числами со знаком будет рассмотрено в дальнейших лабораторных работах.
3. Порядок выполнения работы
3.1. Исследование команд сложения
В микроконтроллерах семейства МК51 имеются следующие команды сложения:
ADD A, Rn ; (A) ß (A) + (Rn) – Сложение аккумулятора с регистром (n = 0,…,7)
ADD A, ad ; (A) ß (A) + (ad) – Сложение аккумулятора с прямоадресуемым байтом
ADD A, @Ri ; (A) ß (A) + ((Ri)) – Сложение аккумулятора с байтом из ПД (i = 0,1)
ADD A, #d ; (A) ß (A) + #d - Сложение аккумулятора с константой
ADDC A, Rn ; (A) ß (A) + (Rn) + (C) – Сложение аккумулятора с регистром и переносом
ADDC A, ad ; (A) ß (A) + (ad) + (C) – Сложение аккумулятора с прямоадресуемым
; байтом и переносом
ADDC A, @Ri ; (A) ß (A) + ((Ri)) + (C) – Сложение аккумулятора с байтом из ПД и
; переносом
ADDC A, #d ; (A) ß (A) + #d - Сложение аккумулятора с константой и переносом
3.1.1. Рассмотрим команды сложения ADD. При их выполнении предполагается, что 1-е слагаемое находится в аккумуляторе, местонахождение 2-го слагаемого указывается в команде. Результат операции помещается в аккумулятор.
Пример. Допустим, что аккумулятор содержит число ECH, а регистр R2 – число 6EH. Тогда команда ADD A, R2 выполнит сложение следующим образом:
Переносы 1 1 1 1 1
ß ß ß ß ß
Аккумулятор 1 1 1 0 1 1 0 0 = ECH
+
Регистр R2 0 1 1 0 1 1 1 0 = 6EH
-------------------------------------------------------------------------------------------------Результат 0 1 0 1 1 0 1 0 = 5AH
Установка признаков (флагов) производится микроконтроллером следующим образом. Так как при сложении был перенос из 3-го разряда аккумулятора в 4-й, то устанавливается бит (флаг) дополнительного переноса AC = 1. Так как в полученном результате количество единиц – число четное (4), то флаг паритета сбрасывается P = 0. И, наконец, так как при сложении возник перенос из старшего (7-го) разряда аккумулятора, то устанавливается флаг переноса C = 1. Флаг OV мы рассматривать не будем, так как он используется для операций с числами со знаком.
Рассмотрим примеры сложения однобайтных чисел.
3.1.2. Допустим, необходимо сложить содержимое регистра R7 и ячейки ПД с адресом 30H.
При использовании прямой адресации программа будет иметь вид:
MOV A, R7 ; Переслать содержимое R7 в аккумулятор
ADD A, 30H ; Сложение аккумулятора с содержимым ячейки памяти по адресу 30H
NOP
Запишите программу в память симулятора и исследуйте ее работу в пошаговом режиме при различных исходных данных. Результаты занесите в табл. 4.1.
Таблица 4.1
Исходные данные |
Получено |
||||
Практически |
Теоретически |
||||
Регистр R7 |
Ячейка 30H |
Регистр A |
Флаг C |
Регистр A |
Флаг C |
11H |
55H |
||||
CCH |
55H |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.