- •Описание лабораторного макета
- •Устройство умк
- •2. Подготовка умк к работе
- •3. Порядок работы
- •3.1. Описание клавиатуры.
- •Индикация и изменение содержимого памяти.
- •3.3. Индикация и изменение содержимого регистров.
- •3.4. Передача управления программе пользователя.
- •3.6. Заполнение массива памяти константой.
- •3.8. Прерывание выполнения программы пользователя.
- •3.9. Пошаговое выполнение программ.
- •Лабораторная работа № 1 запись и выполнение простых программ
- •Теоретическая часть
- •Задание для домашней подготовки
- •Задание для выполнения в лаборатории
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 2 виды адресации и команды пересылок
- •Теоретическая часть
- •Задание для домашней подготовки
- •Задание для выполнения в лаборатории
- •Указания по оформлению отчета
- •Контрольные вопросы
- •Организация циклов
- •Задание для домашней подготовки
- •Задание для выполнения в лаборатории
- •Задание для домашней подготовки
- •Задание для выполнения в лаборатории
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 5 выполнение арифметических операций
- •Теоретическая часть
- •Задание для домашней подготовки
- •Задание для домашней подготовки
- •Задание для выполнения в лаборатории
- •Методические указания
- •Способы адресации процессора к1801
- •Форматы команд микропроцессора кр 1801:
- •Коды способов адресации процессора к1801
- •Задание для домашней подготовки
- •Команды переходов
- •Пример 9.2.
- •Пример 9.3
- •Задание для выполнения в лаборатории
- •Контрольные вопросы
- •Лабораторная работа № 10 выполнение арифметических операций в машинных кодах микропроцессора к1801вм1
- •Теоретическая часть
- •Умножение
- •Деление
- •Задание для домашней подготовки
- •Задание для выполнения в лаборатории
- •Указания по оформлению отчета
- •Контрольные вопросы
- •Приложения
- •Система команд микропроцессора кр580вм80а
- •Система команд мп к1801вм1 Одноадресные команды
- •Двухадресные команды
- •Регистровые команды
- •Команды управления
- •Команды прерываний и специальные команды
- •Изменение кодов условий
- •Условные обозначения
- •Время выполнения команд мп к1801вм1
- •1. Устройство умк 3
Задание для домашней подготовки
1. Разработать программу 3.1 в машинных кодах.
2. Разработать программу, позволяющую осуществить временную задержку согласно таблицы 3.1. При необходимости увеличить число команд в теле цикла
Таблица 3.1
Варианты заданий
Номер варианта |
Задание |
Номер программы |
|
Номер варианта |
Задание |
Номер программы |
1 2 3 4 5 6 |
0,005 0,01 1,5 0,007 0,015 1,0 |
2 3 4 2 3 4 |
7 8 9 10 11 12 |
0,004 0,012 0,85 0,003 0,02 1,2 |
2 3 4 2 3 4 |
3. Ознакомиться с командами условного перехода. Необходимо, чтобы tзад превышало t max в 2-3 раза.
Задание для выполнения в лаборатории
1. Ввести в ОЗУ программу 3.5.
Программа 3.5
0800 0801 0802 0803 0804 0805 0806 0807 |
3Е FC С6 01 FF C3 02 08 |
М1 |
MVI A, FC
ADI 01
RST7 JMP M1 |
2. Исследовать программу согласно таблице 3.2.
При каждой остановке по команде RSТ7 последовательно извлечь содержимое регистра В и регистра признаков F , используя клавишу "РГ". Затем снова запустить программу с адреса 0805.
Таблица 3.2
Таблица исследования программ
Данные в аккумуляторе |
Данные в регистре признаков |
||||||||
D7 (S) |
D6 (Z) |
D5
|
D4 (AC) |
D3
|
D2 (P) |
D1
|
D0 (С) |
||
02 01 .... EF |
|
|
|
|
|
|
|
|
|
3. Ввести в ОЗУ программу 3.6.
Программа 3.6
0600 |
ЗЕ |
|
MVI А, 3 |
0801 |
03 |
|
|
0802 |
06 |
МI |
SUI 01 |
0803 |
01 |
|
|
0804 |
FF |
|
RST7 |
0805 |
C3 |
|
JMP МI |
0806 |
02 |
|
|
0807 |
08 |
|
|
4. Исследовать программу согласно таблице 3.2.
5. Ввести в OЗУ программу временной задержки своего варианта и исследовать ее.
Указания по оформлению отчета
1. Привести все программы с указанием адресов и машинных кодов.
2. Привести таблицы исследования.
3. Сделать выводы.
Контрольные вопросы
Каким образом установятся признаки при выполнении команды ADI AC, если содержимое регистра (А) = B5 ?
Каким образом установятся признаки при выполнении команды ANI AC, если содержимое регистра (А) = B5 ?
Каким образом установятся признаки при выполнении команды XRA A, если содержимое регистра (А) = B5 ?
ЛАБОРАТОРНАЯ РАБОТА № 4
ПОДПРОГРАММА И СТЕК
Цель работы: исследование особенностей записи и обращение к подпрограммам; изучение методов использования стека при создании программ.
Теоретическая часть
При разработке и написании программ одна и та же группа команд может встречаться несколько раз в различные местах программы. Очевидно, что если эти группы команд вводить в программу там, где они должны выполняться, то это приведет к увеличению используемого объема памяти, поэтому удобнее записать эту группу команд как подпрограмму и разместить в памяти отдельно с помощью специальных команд.
Подпрограмма представляет собой законченный модуль программы и может вызываться заданное число раз. Использование подпрограмм имеет следующие преимущества:
- проще и быстрее составляются более простые модули;
- разработка программы, разбитой на модули, может вестись параллельно, что сокращает время на подготовку всей программы;
- подпрограммы сокращают объем используемой памяти;
- происходит накопление библиотеки отлаженных алгоритмов.
Организация подпрограммы требует соблюдения некоторых правил. Правильно составленная подпрограмма не должна изменять содержимое ни одного регистра общего назначения МП. Это требование можно выполнить, если при вызове подпрограммы содержимое регистров запомнить, а после выполнения подпрограммы - восстановить. Кроме содержимого регистров необходимо запомнить содержимое регистра флагов. Наиболее удобной для временного хранения является стековая память или стек. В начале подпрограммы целесообразно содержимое регистров запомнить в стеке, а по окончании подпрограммы - извлечь из стека.
Для вызова подпрограммы и возврата из нее к основной программе используются команды CALL и RET. Обращение к подпрограмме можно осуществить также с помощью команд передачи управления JМР и возвращаться с помощью PCHL.
Загрузка данных в стек и извлечение их из стека осуществляется в МП с помощью специальных команд: PUSH и POP. При обращении к стеку необходимо первоначально назначить область стека в ОЗУ, записав в указатель стека SP адрес вершины с помощью команды LXI или команды SPHL.
Все операции со стеком должны быть сбалансированы т.е. каждая подпрограмма должна иметь равное число команд PUSH и POP и оканчиваться командой RET.
Можно рекомендовать следующий порядок организации подпрограммы (табл.4.1).
Таблица 4.1
Метка |
Мнемокод |
Комментарий |
PODPR |
PUSH PSM PUSH В PUSH D PUSH H |
Загрузка регистра флагов и аккумулятора Загрузка в стек регистровой пары ВС Загрузка в стек регистровой пары DE Загрузка в стек регистровой пары HL |
|
|
Основной текст подпрограммы |
|
POP Н POP D POP В POP PSW |
Извлечение из стека содержимого регистров в обратной последовательности. |
|
RET |
Возврат в основную программу |
Рассмотрим несколько подпрограмм.
Подпрограмма 1. Изменение знака числа
Программная реализация этой операции следует из представления чисел для МП КР580 в дополнительном коде и осуществляется при помощи двух команд: СМА - инверсия содержимого аккумулятора INR А - инкремент содержимого аккумулятора. Она может быть использована при замене операции вычитания операцией сложения в дополнительном коде.
Для изменения знака двухбайтового числа приходится выполнять инверсию каждого байта, последовательно пересылая его в аккумулятор и используя затем команду INX. Например, для изменения знака числа, находящегося в регистровой паре ВС, необходима следующая последовательность команд: МОV А,В СMА MOV В,А MOV А,С СМА MOV C,A INX В.
Подпрограмма 2. Определение модуля числа
В микроЭВМ числа представляются в дополнительном коде, поэтому при определении модуля нельзя ограничиться только определением знака числа, информация о котором содержится в старшем бите. Если число положительно (S = 0), то его следует оставить в том же виде. Если же число отрицательное, то его необходимо умножить на "-1" и добавить 1.
(Справка: бит знака S регистра признаков F устанавливается в 1, если старший значащий ряд результата операции равен 1).
Знак можно определить с помощью ряда команд, в частности, используя операцию маскирования или засылку старшего бита в триггер переноса с последующим его анализом. Иногда выполнение этих операций нежелательно, т. к оно сопровождается изменением содержимого аккумулятора. Целесообразно применять команду логического сложения (или умножения) содержимого аккумулятора с самим собой. При этом содержимое аккумулятора не изменяется, а все флаги устанавливаются в состояние, соответствующее результатам операции.
На рис.4.1 приведена структурная схема программы определения модуля числа, находящегося в РОН Е.
Рис. 4.1. Блок - схема программы определения модуля числа
Подпрограмма 3. Поиск максимального числа в массиве чисел.
В прикладных программах встречается задача определения максимального из нескольких чисел. Для выполнения этой операции используется команда сравнения СМР, не изменяющая содержимого аккумулятора.
Допустим, 9 чисел занимают область ОЗУ, с адреса 1 по адрес 2. Требуется поместить максимальное число в РОН В. Адреса ячеек памяти, где хранятся числа, будем указывать в регистровой паре НL. На рис.4.2 приведена структурная схема для определения максимального из массива чисел.
Отметим некоторые особенности подпрограммы. Анализ массива начинается с конечного адреса. Окончание массива характеризуется нулевым значением числа в регистре С.
В ряде случаев нет необходимости в хранении всего массива чисел, а достаточно определить максимальное число по мере поступления каждого нового значения. На рис.4.3 приведена структурная схема такого копирного сравнения чисел. Поступающее новое число находится в аккумуляторе, а максимальное число помещается в РОН В.
Рис. 4.2. Блок - схема программы определения максимального из массива чисел
Рис. 4.3. Блок - схема копирного сравнения чисел