
- •Инструкция по технике безопасности
- •Методические указания по оформлению отчёта к лабораторным работам.
- •2.1.Правила оформления отчёта.
- •Содержание отчёта:
- •Лабораторная работа мп – 1 Исследование микро-эвм на основе микропроцессора кр580ик80
- •3.2 Краткие теоретические сведения
- •3.3.Учебный микропроцессорный комплект (умк)
- •3.4 Задание для домашней подготовки
- •3.5. Подготовка умк к работе
- •3.6. Задания к лабораторной работе
- •3.6.2. Индикация и модернизация содержимого озу.
- •3.6.3. Модификация содержимого регистров микропроцессора
- •3.6.4. Заполнение озу константой
- •3.6.5. Копирование областей памяти
- •3.6.6. Вычисление контрольной суммы массива памяти
- •3.7. Выполнение программы пользователя
- •3.8. Контрольные вопросы
- •Лабораторная работа мп-2 Исследование цикла выполнения команд микропроцессора кр580ик80
- •4.2. Теоретические сведения
- •4.3. Задание для домашней подготовки
- •4.4. Порядок выполнения работы
- •4.5. Контрольные вопросы
- •Лабораторная работа мп-3 Программирование арифметических операций в системе команд микропроцессора кр580вм80
- •Основные теоретические сведения.
- •Приемы программирования типовых арифметических задач
- •5.3.2. Десятичное сложение
- •5.3.3. Умножение
- •Порядок выполнения работы
- •5.5 Контрольные вопросы
- •6. Лабораторная работа мп-4 Программная реализация типовых функций управления на основе микропроцессора к580ик80
- •6.2. Краткие теоретические сведения
- •6.2.1. Опрос двоичного датчика
- •6.2.2. Ожидание события
- •6.2.3. Ожидание импульсного сигнала
- •6.2.4. Выделение и обработка отдельных бит информации
- •6.2.5. Формирование управляющего сигнала
- •6.2.6. Вывод управляющего слова на группу автономных устройств
- •6.2.7. Формирование временной задержки малой длительности
- •6.2.8. Формирование последовательности импульсных сигналов с изменяемой длительностью и скважностью.
- •6.3. Задание на дом
- •7.Лабораторная работа мп-5
- •7.3. Задание для домашней подготовки
- •7.4. Порядок выполнения работы
- •7.5. Контрольные вопросы
- •Приложение
- •Литература
Приемы программирования типовых арифметических задач
5.3.1.Многобайтные сложение и вычитание
В таких задачах используются команды сложения и вычитания с переносом и заемом чисел произвольной длины без знака.
Рассмотрим сложение двух трехбайтных чисел:
32AF8A
+
84BA90
B76A1A
Это сложение можно выполнить путем сложения двух младших байтов слагаемых, затем результатирующий перенос прибавляют к двум старшим байтам и т.д.:
Приведенная далее программа NADD выполняет многобайтное сложение при следующих условиях:
- в регистре Е находится длина каждого слагаемого (единица длины - байт), в данном примере длина равна 3;
- слагаемые хранятся в памяти, начиная с младших байт по адресам FIRST1 и FIRST2 соответственно;
- результат будет накапливаться от байта младшего разряда до байта старшего разряда с началом в ячейке памяти FIRST1, заменяя первоначальное содержимое этих ячеек.
Память до сложения Память после сложения
FIRST1 FIRST1
FIRST2 FIRST2
MADD : LXI B,FIRST1 ; адрес 1-го слагаемого
LXI H,FIRST2 ; адрес 2-го слагаемого
XPA A ; очистка бита переноса
LOOP : LDAX B ; байт 1-го слагаемого в (А)
ADC N ; сложение с байтом 2-го слагаемого
STAX B ; хранение результата по адресу слагаемого
INX B ; адрес
INX H ; адрес
DCP E ; если счетчик ≠0, то
JNZ LOOP ; переход к сложению старших байт
PET ; иначе конец.
Поскольку ни одна из команд в программном цикле, за исключением ADC, не влияет на бит переноса, то сложение с переносом будет продолжаться правильно.
5.3.2. Десятичное сложение
Любую четырехбитовую величину данных можно рассматривать как десятичную цифру от 0 до 9, если не содержаться комбинации, соответствующие шестнадцатиричным цифрам от А до F. Десятичное сложение выполняется при допущении, что каждый байт содержит две четырехбитовые десятичные цифры.
Байты суммируются в аккумуляторе стандартным способом, а команда DAA (десятичная коррекция А) применяется затем для преобразования 8-битового результата в правильное представление двух десятичных цифр. Установка битов переноса и вспомогательного переноса влияет на операцию DAA, что делает возможность складывать многоразрядные числа.
Рассмотрим подробнее процесс выполнения команды DAA. Эта команда преобразует в аккумуляторе 8-битное двоичное число в две четырехбитные двоично-кодированные цифры. Это происходит с учетом следующих правил:
Если младшие 4 бита содержимого аккумулятора представляют число > 9 или бит вспомогательного переноса установлен, то содержимое аккумулятора увеличивается на 6. В противном случае содержимое аккумулятора не изменяется.
Если после первого действия старшие четыре бита содержимого аккумулятора представляют число > 9 или установлен бит переноса, то старшие четыре бита инкрементируются на 6. В противном случае содержимое аккумулятора не изменяется.
Пример. Пусть необходимо сложить два десятичных числа:
2985
+
4936
7921
Для этого в программе необходимо выполнить следующие действия:
Сбросить бит переносов и сложить младшие байты (это будет соответствовать сложение двух младших десятичных цифр):
85 = 10000101
+
36 = 00110110
перенос = 0
10111011
С=0
Вспомогательный
перенос =0
Выполнить команду DAA
Поскольку правые 4 бита > 9, то будет прибавлено 6 к этим битам содержимого аккумулятора:
(А) = 10111011
+
6 = 0110
11000001
Так как теперь левые 4 бита > 9, то будет добавлено и к этим битам:
(А) = 11000001
+
6 = 0110____
21 = 00100001
п еренос С=1
Аккумулятор содержит теперь число 21. Складываем две следующие цифры:
29 = 00101001
49 = 01001001
перенос = 1
01110011
С
=0
АС=1
Выполняем команды DAA
Так как бит вспомогательного переноса АС установлен, то 6 будет прибавлено к аккумулятору:
(А) = 01110011
+
6 = 0110
79 =11000001
п еренос С=1
Так как левые 4 бита и правые 4 бита ≤ 9, а бит переноса сброшен, то никаких дальнейших действий не происходит. Таким образом, правильный десятичный результат равен 7921.
Для сложения десятичных чисел вполне подходит программа для сложения многобайтных чисел (MADD). Требуется только ввести команду DAA после команды A C M. Каждая итерация программного цикла в такой программе будет складывать по две десятичные цифры.