рижский технический университет

advertisement
Рижский Технический университет
Лабораторные работы
по основам микропроцессорной техники
Даугавпилс - 1991 г
-1-
КРАТКОЕ ОПИСАНИЕ
ПОДГОТОВКА УМК К РАБОТЕ
УЧЕБНОГО МИКРОПРОЦЕССОРНОГО
КОМПЛЕКТА
1. Установите кнопку "~" в отжатое состояние.
2. Подключите УМК к сети переменного тока 220 В 50 Гц.
3. Переключатель "РВ/ШГ" установите в состояние "РБ".
4. Включите УМК, нажав кнопку "~".
5. Нажмите кнопку "СБ". При этом в крайней левой позиции дисплея
должен появиться знак "-". После чего УМК готов к работе.
ПОРЯДОК РАБОТЫ I.
Описание клавиатуры.
Управляйте работой УМК с помощью директив, вызываемых с клавиатуры
пульта.
Клавиатура состоит из. 24 клавиш. Из них 8 клавиш директивные, а 16 информационные.
Директивные клавиши служат для вызова директив и имеют следующие
обозначения:
"П" - чтение и изменение содержимого памяти;
"РГ" - чтение и изменение содержимого регистров микропроцессора;
"ОТ" - передача управления программе пользователя;
"КС" - определение контрольной суммы массива памяти;
"ЗК" - заполнение массива памяти константой;
"ПМ" - перемещение массива памяти в адресном пространстве;
"_" - клавиша пробела служит для разделения нескольких переменных при
вводе;
"ВП" - выполнить (означает конец директивы). .
Информационные клавиши служат для ввода чисел в шеснадца-тиричном
коде.
При неправильной работе с клавиатурой в крайней правой позиции дисплея
индицируется знак "?".
2. Индикация и изменение содержимого памяти.
Для индикации содержимого ячейки памяти последовательно нажмите
клавиши:
"П" XI X2 X3 X4 "_",
где XI Х2 Х3 Х4 - шестнадцатеричный адрес нужной ячейки. В качестве
адреса фиксируются последние введенные 4 цифры.
На дисплее при этом появится введенный адрес и содержимое ячейки
памяти с этим адресом.
Если необходимо изменить содержимое этой ячейки памяти, то следует
набрать новое содержимое и нажать клавишу "_". В качестве нового
содержимого фиксируются 2 последние цифры. После этого новое
содержимое запишется в память, а на экране высветится адрес следующей
ячейки и ее содержимое.
Если же содержимое ячейки памяти менять не следует, то
новое содержимое не вводится, а сразу нажимается клавиша "_"
Когда все нужные ячейки памяти просмотрены и изменены нужно нажать
клавишу "ВП". При этом прекращается действие директивы "П".
3. Индикация и изменение содержимого регистров.
Нажмите клавишу "РГ", а затем идентификатор регистра. Идентификаторами
регистров являются символы: А - регистр А в - регистр в с - регистр с D
- регистр D Е - регистр Е н - регистр н L - регистр L F - регистр
условий SL - младший байт указателя стека SH - старший байт указателя
стека PL - младший байт счетчика команд PH - старший байт счетчика
команд Ответом на ввод идентификатора регистра является индика-
-2-
ция содержимого указанного регистра. Для изменения содержимого
регистра наберите новое значение. После этого нажмите клавишу "_" и
можно вводить идентификатор следующего регистра. При необходимости
перехода к следующему регистру без изменения Содержимого
индицируемого, не набирая новых данных, нажмите клавишу "_". для
завершения работы директивы нажмите клавишу "ВП".
4. Передача управления программе пользователя.
Нажмите последовательно следующие клавиши:
"СТ" АДРЕС1 "_" АДРЕС2 "_" АДРЕСЗ "ВП",
где АДРЕС1 - начальный адрес программы;
АДРЕС2 и АДРЕСЗ - адреса выполнения прерывания программы .
Производится передача управления программе по адресу АД-РЕСГ. АДРЕС2 и
АДРЕСЗ воспринимаются как адреса до которых должна выполняться
программа, и должны находиться в пределах границ ОЗУ. Если они
отсутствуют, то выполнение программы не прерывается.
5. Пошаговое выполнение программ пользователя.
Имеется две разновидности пошагового выполнения программы: поцикловый
режим и покомандный режим. Поцикловый режим в данных работах не
используется.
Для вызова пошагового режима:
- установите переключатель "РБ/ШГ" в состояние "Ж1". При этом
происходит подключение световой индикации;
- переключатель "КМ/ЦК" установите в состояние "КМ";
- передайте управление выполняемой программе.
После этого на световой индикации отобразятся начальный адрес
программы, данные по этому адресу и содержимое регистра состояния. Для
выполнения очередной команды программы нажмите кнопку "ШГ".
-3-
КРATКОЕ
ОПИСАНИЕ
УЧЕБНОЙ МИКРОЛАБОРАТОРИИ
"МИКРОЛАБ"
ПОРЯДОК РАБОТЫ
1. Органы управления и контроля.
Все органы управления прибора расположены на плате. Назначение каждой
клавиши приведено ниже.
СБРОС - сброс системы и возврат к монитору в любой момент времени;'
АД+ - приращение адреса на единицу и считывание данных из памяти;
АД— уменьшение адреса на единицу и считывание данных из памяти;
УСТ.АД. - установка адреса и считывание данных из памяти;
ЗП - Запись данных в память и приращение адреса на единицу;
BOЗBP - возвращение к выполнению программы, начатой по команде ПУСК;
ПУСК - выполнение программы с индицируемого адреса;
0-9, А - F - ввод данных в шестнадцатеричном коде;
ВВОД и ВЫВОД - ввод данных с магнитофона и вывод данных на магнитофон
( в лабораторных работах не используются ).
2. Устройство индикации.
Выходным устройством, служащим для визуального наблюдения за
внутренним состоянием системы, являются восемь восьмисегментных
индикатора. На них индицируются входные данные, адреса памяти, данные
памяти, содержимое регистров и флагов ЦП.
Левые четыре индикатора являются индикаторами адресного регистра (MAP)
и служат для вывода адреса. Правые четыре индикатора являются
индикаторами регистра данных (ИРД) и служат для вывода данных.
3. Индикация и изменение содержимого памяти.
Наберите с помощью клавиш данных нужный адрес памяти. При этом этот
адрес индицируется на ИРД (правые четыре индикатора). После набора
нужного адреса нажмите клавишу УСТ.АД. При этом адрес записывается в
ИАР (левые четыре индикатора). Данные из ячейки памяти с адресом,
соответствующим ИАР, высвечиваются в двух крайних правых позициях ИРД.
Данные, высвечиваемые в этих позициях ранее, сдвигаются на две позиции
влево.
Если данные по набранному адресу менять не нужно, то для перехода к
следующему адресу нажмите кнопку АД+. При этом в ИАР появится
следующий адрес, а в крайних правых позициях ИРД появится содержимое
этого адреса. При нажатии на клавишу АД- на индикаторах высвечивается
предыдущий адрес и его содержимое.
Если данные в текущем адресе нужно изменить, то наберите новые данные
и нажмите клавишу ЗП. При этом новые данные записываются в память по
текущему адресу, а на дисплей выводится следующий адрес и его
содержимое.
-4-
4. Индикация и изменение содержимого регистров.
Индикация и изменение содержимого регистров осуществляется путем
индикации и изменения содержимого определенных ячеек памяти.. Ниже
приведены адреса ячеек памяти, используемых для временного хранения
значений регистров.
83ЕВ - аккумулятор;
83ЕА - флаговый регистр;
83Е9 - B-регистр;
83Е8 - C-регистр;
83Е7 - D-регистр;
83Е6 - Е-регистр;
83Е5 - H-регистр;
83Е4 - L-регистр;
83ЕЗ - указатель стека (старший байт);
83Е2 - указатель стека (младший байт);
83EI - программный счетчик (старший байт);
83Е0 - программный счетчик (младший байт).
Для изменения содержимого регистра измените содержимое соответствующей
ячейки памяти. Новое содержимое будет записано в регистр при запуске
программы пользователя или при выполнении очередного шага в пошаговом
режиме.
5. Передача управления программе пользователя.
Для запуска программы установите в MAP ее начальный адрес и нажмите
клавишу ПУСК. Программа пользователя может оканчиваться командами HLT
или JMP 0008. Команда HLT останавливает работу процессора. После ее
выполнения нужно нажать клавишу СБРОС. Команда JMP 0008 передает
управление программе Монитор, управляющей системой. После ее
выполнения система ждет новых команд. После выполнения команд HLT и
JMP 0008 содержимое регистров процессора изменяется, а содержимое ОЗУ
пользователя остается прежним.
6. Работа в пошаговом режиме.
Для работы в пошаговом режиме переключатель "АВТ/ШАГ" установите в
положение "ШАГ". Запуск программы производится обычным образом. Но
выполнится только одна команда программы. На MAP высветится адрес
следующей команды. На двух левых индикаторах ИРД высветится содержимое
аккумулятора, а на двух правых - содержимое регистра флагов. Перед
выполнением следующего шага можно просмотреть и изменить содержимое
регистров и ячеек памяти, если это требуется. Следующая команда
выполняется после нажатия на клавишу ВОЗВР.
-5-
ЛАБОРАТОРНАЯ РАБОТА №1 ВВОД И ВЫПОЛНЕНИЕ ПРОГРАММЫ
1. Цель работы.
- освоить порядок ввода программ в УМК и "Микролаб", ее модификации и
выполнения;
- освоить запись информации в двоичной и шеснадцатиричной системах
счисления;
- ознакомиться с записью программ на языке ассемблера.
2. Описание лабораторной установки.
Работа может проводится на УМК или "Микролабе" без дополнительных
устройств.
3. Домашняя подготовка.
3.1. Ознакомиться с представлением чисел в двоичной и
шестнадцатеричной системах счисления.
3.2. Ознакомиться с принципами управления дисплеями УМК и
"Микролаба"(См. Приложение I).
3.3. Ознакомиться с записью программ на языке ассемблера.
3.4.
Изучить назначение клавиш на клавиатурах УМК и "Микролаба".
3.5. Продумать действия по включению микропроцессорных комплектов,
вводу в их ОЗУ кодов и выполнению введенных программ.
4. Рабочее задание.
4.1. Ввести в оперативную память следующую программу:
а) для УМК
0600
0802
0804
0806
0808
3E
D3
3Е
D3
76
22
F8
06
F9
MVI
OUT
MVI
OUT
HLT
А,22
P8
А,06
F9
MVI
STA
STA
MVI
STA
STA
STA
STA
STA
STA
HLT
А,06
83F9
83FF
А,00
83F8
83FA
83FB
83FC
83FD
83FE
б) для "Микролаба"
8000
8002
8005
8008
800А
800D
8010
8013
8016
8019
801C
3Е
32
32
3Е
32
32
32
32
32
32
76
06
Р9
FF
00
F8
FА
FВ
FC
FD
FЕ
83
83
83
83
83
83
83
83
4.2. Выполнить введенную программу. В результате выполнения программы
на дисплее должна вывестись цифра "1" на двух индикаторах. Запишите
номера этих индикаторов, считая слева.
-6-
4.3. Составьте семисегментный код высвеченной цифры, пользуясь
приложением I. Найдите этот код в программе.
4.4. Составьте семисегментный код знака, указанного преподавателем.
Измените программу так, чтобы на дисплей выводился этот знак.
Проверьте работу измененной программы.
4.5. Измените программу так, чтобы знак высвечивался в индикаторах,
указанных преподавателем (См. Приложение I).
4.6. Составьте программу для высвечивания на дисплее двух различных
знаков, указанных преподавателем.
а) для УМК:
Программа может иметь следующую структуру:
- 4 команды для первого знака, выводимого в первый индикатор;
- блок из трех команд очистки регистров дисплея
3Е 00
D3 F8
D3 F9
MVI А,00
OUT F8
OUT F9
- 4 команды для высвечивания второго знака на втором индикаторе;
- 3 команды очистки;
- переход к началу программы
С3 00 08
JMP 0800
б) для "Микролаба" структура программы аналогична первоначальной.
-7-
ЛАБОРАТОРНАЯ РАБОТА N2 МОДИФИКАЦИЯ ПРОГРАММ
1.
Цель работы.
Получить навыки по программированию на языке ассемблера
2. Описание лабораторной установки.
В лабораторной работе используется УМК, к которому подключено
устройство вывода информации - восемь светодиодов или "Микролаб" без
дополнительных устройств.
3. Домашняя подготовка.
3.1. Изучить приведенную ниже программу и уяснить действия,
выполняемые каждой командой (См. Указания и методические
рекомендации).
3.2. Продумать, как нужно изменить программу, чтобы в результате ее
выполнения на устройстве вывода наблюдался эффект одиночного "бегущего
огня".
3.3. Продумать, как изменить программу, чтобы она работала с другого
начального адреса.
0160
0162
0164
0166
0168
016А
016С
016D
0170
0171
0174
0175
0176
данные
aдpecl
адрес2
3Е
D3
3Е
D3
06
0Е
0D
C2
05
С2
07
3С
С3
данные
адрес1
01
адрес2
FF
64
6С 01
6А 01
66 01
для УМК
90
93
91
Исходная
MVI
OUT
MVI
М1: OUT
MVI
М2: MVI
M3: DCR
JNZ
DCR
JNZ
RLC
INR
JMР
программа
A, данные ;
программирование
адрес1
;
интерфейса
А,01
;
загрузка позиции
aдpec2
;
индикации
B,FF
;
блок
С,64
;
команд
С
;
создания
МЗ
;
задержки
В
;
на время
М2
;
индикации
;
сдвиг влево
А
; увеличение (А) на 1
M1
;индикация следующего
;
состояния
для "Микролаба"
81
FB
F9
4. Рабочее задание.
4.1. Ввести в ОЗУ исходную программу с начального адреса из таблицы
вариантов и проверить ее работу.
4.2. Внести в программу такие изменения, чтобы она действовала
согласно вашему варианту (См. таблицу вариантов).
В таблице вариантов указаны два последовательных состояния индикаторов
и начальный адрес программы для УМК и "Микролаба" .
5. Указания и методические рекомендации.
Рассмотрим текст программы. Первые две команды производят
программирование интерфейса (См. Приложение 3). Затем в аккумулятор
-8-
заносится код, определяющий какие позиции светодиодного индикатора
должны светиться. Здесь этот код равен 01 (в двоичном виде 00000001).
Это означает, что светиться должен только один правый светодиод. Далее
следует команда вывода этого кода через интерфейс на светодиодный
индикатор. Чтобы состояние индикатора какое-то время сохранялось
неизменным в программе создана задержка времени.
Для создания задержки программа имеет два вложенных цикла. Перед
началом внешнего цикла в регистр В заносится число FF16 = 25510, а перед
началом внутреннего цикла в регистр С заносится число 6416 = 10010.
Далее содержимое регистра С уменьшается на единицу. Если результат не
равен О, то содержимое регистра С снова уменьшается на единицу. Таким
образом внутренний цикл выполняется 100 раз. Когда же
ТАБЛИЦА ВАРИАНТОВ
адрес
"Микролаб"
N
индикация
I
10000000
01000000
0800
8000
2
11000000
01100000
0820
8020
3
11000000
00110000
0840
8040
4
01111111
10111111
0860
8060
5
10100000
01010000
0880
8080
6
00011011
00110110
08A0
80A0
7
00000001
00000010
08C0
80C0
8
00001111
00011110
08E0
80E0
9
00110011
01100110
0900
8100
10
00000001
00000100
0920
8120
УМК
содержимое регистра С станет равным нулю, уменьшается на единицу
содержимое регистра В и вновь 100 раз будет выполнен внутренний цикл.
Это будет продолжаться до тех пор, пока содержимое регистра В не
станет равным нулю. Таким образом внутренний цикл будет выполнен 25
500 раз. В течение этого времени выведенная на светодиоды информация
не меняется.
После задержки командой RLC единица из правого разряда сдвигается на
одну позицию влево, а командой INR А к содержимому аккумулятора
добавляется единица, тем самым появившийся в правой позиции 0
заменяется на I. После этого код из аккумулятора вновь выводится на
-9-
индикатор. Теперь уже
будут светиться два правых светодиода.
Когда таким образом единицами будут заполнены все разряды числа,
очередная команда циклического сдвига RLC уже не приведет к появлению
нуля в правом разряде. А последующее увеличение числа 11111111 на
единицу даст в итоге нули во всех разрядах и весь описанный процесс
начнется с начала.
-10-
ЛАБОРАТОРНАЯ РАБОТА N3 АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ КОМАНДЫ
МИКРОПРОЦЕССОРА
1. Цель работы.
Изучить арифметические и логические команды микропроцессора.
2. Описание лабораторной установки.
В работе используется УМК с устройством вывода информации из восьми
светодиодов или "Микролаб" без дополнительных устройств.
3. Домашняя подготовка.
3.1. Изучить основные арифметические и логические команды
микропроцессора.
3.2. Теоретически исследовать ход выполнения приведенной программы.
Перепишите программу в протокол. Определите состояние аккумулятора
после выполнения процессором каждой команды и запишите его рядом с
каждой командой в двоичной и шестнадцатиричной формах.
Исследуемая программа
MVI
ОUТ
MVI
OUT
ORI
OUT
MOV
OUT
ADD
OUT
SUI
OUT
CMA
OUT
ANI
OUT
ORA
OUT
INR
OUT
HLT
данные1
aдpecl
адрес2
для УМК
90
93
91
А, данные1
адрес1
A, данные2
адрес2
11
адрес2
В,А RLC
aдpec2
В
aдpec2
05
адрес2
aдpec2
F0
aдpec2
В
aдpec2
A
aдpec2
для "Микролаба"
81
FВ
F9
В качестве данных2 взять последние две цифры Вашего студенческого
билета. Считать их двухзначным шестнадцатиричным числом.
-11-
4. Рабочее задание.
4.1. Перевести программу из мнемонической записи в машинные коды. Для
этого воспользуйтесь Приложением 2.
4.2. Введите программу в ОЗУ.
4.3. Запустите программу в пошаговом режиме. После выполнения каждой
команды OUT сравнить состояние светодиодов с двоичным числом,
определенным при домашней подготовке. В случае несоответствия найти и
устранить ошибку.
5. Указания и методические рекомендации.
Для выполнения программы в пошаговом режиме на УМК нужно нажать
кнопочный переключатель "РБ/ШГ", после чего запускается директивой СТ.
Для выполнения очередной команды надо нажать кнопку "ШАГ".
Для выполнения программы в пошаговом режиме на "Микролабе" тумблер
"АВТ-ШАГ" устанавливается в положение "ШАГ". Затем устанавливается
начальный адрес программы. Программа запускается командой "ПУСК".
Теперь после каждого нажатия кнопки "ВОЗВР" выполняется одна команда.
-12-
ЛАБОРАТОРНАЯ РАБОТА N4 СЛОЖЕНИЕ И ВЫЧИТАНИЕ МНОГОБАЙТОВЫХ ЧИСЕЛ
1.
Цель работы.
Ознакомиться с принципами работы с многобайтовыми числами.
2. Описание лабораторной установки.
В работе используется УМК или "Микролаб" без дополнительных устройств.
3. Домашняя подготовка.
3.1. Изучить программу сложения многобайтовых чисел.
3.2. Продумать, как изменить программу для вычитания многобайтовых
чисел и сложения двоично-десятичных чисел.
4. Рабочее задание.
4.1. Выполнить вручную действия по сложению и вычитанию двух
шестнадцатеричных чисел и сложению двух десятичных чисел, указанных
преподавателем.
4.2. Перевести программу в машинные коды.
4.3.
Ввести в ОЗУ программу сложения многобайтовых чисел.
4.4. Ввести в ОЗУ заданные шестнадцатеричные числа, запустить программу и определить результат вычислений. Сравнить его с
засчитанным вручную.
4.5. Внести в программу изменения, необходимые для выполнения операции
вычитания двух многобайтовых чисел и повторить пункт 4.4.
4.6. Внести в программу изменения, необходимые для выполнения операции
сложения чисел в двоично-десятичном коде. Ввести в ОЗУ заданные
десятичные числа и запустить программу. Сравнить результат с
рассчитанным вручную.
Программа Сложения многобайтовых шестнадцатеричных чисел
LXI B,N1
LXI Н,N2
ORA А
M1: LDAX В
ADC М
STAX В
DCR D
JZ M2
INX В
INX Н
JMP M1
M2: HLT
;
загрузить адрес N1 в регистры ВС
;
загрузить адрес N2 в регистры HL
;
очистить бит переноса
;
загрузить в аккумулятор байт из ячейки N1
; сложить с байтом из ячейки N2 и с переносом NOP
;
запомнить результат по адресу N1
;
определить число оставшихся байтов
;
прекратить вычисления, если (D) = 0
;
адрес следующего байта 1-го числа
;
адрес следующего байта 2-го числа
;
перейти к сложению следующих байтов
N1 и N2 - начальные адреса операндов. Их можно выбирать произвольно в
адресном пространстве ОЗУ ( для УМК 0800 - 0BFF, для "Микролаба" 8000
- 83С6 ). Нужно лишь следить, чтобы области памяти, где хранятся коды
команд и два многобайтовых числа не пересекались.
Перед запуском программы в регистр D должно быть записано число байтов
-13-
операндов.
5. Указания и методические рекомендации.
При работе с микропроцессором часто оказывается, что длина слов, с
которыми он оперирует, недостаточна для достижения нужной точности
вычислений. 8-разрядные микропроцессоры позволяют использовать числа в
диапазоне от -128 до +127. Очевидно, что для большинства задач такой
диапазон неприемлем. Используя два байта, получим диапазон от -32 768
до +32 767. В этом случае ошибка представления чисел оценивается
± 0.0015%.
Однако, иногда требуется еще более высокая точность. Такую точность
можно достичь, используя числа, представленные необходимым числом
байт. Для действий над многобайтовыми числами необходимы специальные
программы. Подобная программа исследуется в данной работе.
Сложение многобайтовых чисел проводится поэтапно. Сначала складываются
младшие байты чисел. Результат сложения нужно запомнить в памяти.
Затем складываются следующие по старшинству байты чисел. При этом
нужно учитывать, что при сложении младших байтов мог возникнуть
перенос. То есть сложение нужно производить еще и с признаком
переноса. Результат этого сложения тоже запоминается и осуществляется
сложение следующих байтов. Эти операции продолжаются пока не будут
сложены все байты чисел. Сложение производится командой ADC, которая
осуществляет сложение двух байтов с признаком переноса. Так как при
сложении младших байтов никакого переноса еще быть не может, признак
переноса очищается командой ORA А.
Младшие байты складываемых чисел помещаются в ячейки с адресами N1 и
N2. Следующие байты этих чисел занимают ячейки с более старшими
адресами.
Для вычитания многобайтовых чисел можно использовать эту же программу,
но вместо команды сложения ADC использовать команду вычитания SBB.
Для сложения двоично-десятичных чисел после каждого сложения нужно
проводить операцию десятичной коррекции. Эта операция осуществляется
командой DAA, которая добавляет число 6 к младшей тетраде ( 4 бита )
результата, если ее значение больше 9 или был перенос из младшей
тетрады в старшую. Затем то же самое команда DAA проделывает со старшей тетрадой результата.
Перед сложением или вычитанием чисел в регистр D поместить количество
байт операндов. В УМК для этого можно воспользоваться директивой "РГ".
Например запись числа 5 в регистр D осуществляется нажатием следующих
клавиш:
РГ D 05 ВП
В "Микролабе" такой директивы нет. Здесь количество байт можно занести
в регистр D программным путем. В этом случае первой командой программы
должна быть команда
MVI D, данные
где данные - количество байтов многобайтовых операндов.
Другой способ занести в нужный регистр данные описан в Кратком
описании "Микролаба".
-14-
ЛАБОРАТОРНАЯ РАБОТА N5 РАБОТА С МАССИВАМИ ДАННЫХ
1.
Цель работы.
Получить навыки в написании программ на языке ассемблера по заданному
алгоритму. Освоить работу с массивами данных.
2. Описание лабораторной установки.
В работе используется УМК или "Микролаб" без дополнительных устройств.
3. Домашняя подготовка.
3.1. Изучить алгоритм программы нахождения максимального числа из
массива.
3.2. Составить программу на языке ассемблера для нахождения
максимального числа в массиве.
3.3.
Изучить алгоритм программы суммирования массива данных.
3.4. Составить программу на языке ассемблера для суммирования массива
данных.
4. Рабочее задание.
4.1. Перевести программу нахождения максимального числа в массиве
данных в машинные коды.
4.2. Ввести в ОЗУ коды команд и данные и выполнить программу.
Проверить результат.
4.3. Определить вручную сумму чисел массива.
4.4. Перевести программу суммирования массива данных в машинные коды.
4.5. Ввести программу в ОЗУ и запустить ее на выполнение. Проверить
результат.
5. Указания и методические рекомендации.
Часто при работе с микропроцессором приходится иметь дело с обработкой
массива данных. В данной работе исследуются две операции с массивами :
нахождение максимального числа в массиве и суммирование членов
массива.
Первая составленная программа должна найти максимальное число в
массиве из известного числа байт и занести его в ячейку с адресом N2.
Сам же массив располагается в ячейках, начиная с адреса N1.
Поиск максимального числа осуществляется пересылкой первого числа
массива данных из памяти в аккумулятор с последующим его сравнением с
остальными числами массива. Как только появляется число, которое
больше числа в аккумуляторе, то это число пересылается в аккумулятор и
продолжается сравнение уже этого числа с числами, размещенными в
массиве за ним.
-15-
Алгоритм программы, решающей эту задачу может выглядеть следующим
образом:
1) Организовать счетчик циклов. Для этого можно использовать любой
регистр, кроме аккумулятора и пары HL, которую удобно использовать для
косвенной адресации членов массива. Следует учесть, что в выбранный
регистр нужно занести число на единицу большее числа данных в массиве.
2) Организовать косвенную адресацию. Занести в пару HL адрес начала
массива.
3) Переслать в аккумулятор байт из ячейки памяти, адрес которой в HL.
4) Уменьшить на единицу число в счетчике циклов.
5) Если число в счетчике равно 0 перейти к пункту 10.
6) Увеличить адрес данных.
7) Сравнить содержимое регистра со следующим байтом данных. Для
сравнения можно использовать команду СМР М. Если данные в памяти
больше чем содержимое аккумулятора, то бит переноса устанавливается
этой командой в "1".
8) Если (А) меньше данных, перейти к пункту 3.
9) Переход к пункту 4.
10) Переслать максимальное число из аккумулятора в память.
11) Конец программы.
Вторая программа должна просуммировать все числа в массиве, начальный
адрес которого N1. Определено, что в массиве М чисел, и их сумма не
превышает двух байтов. Сумму нужно разместить в 2-х рядом
расположенных ячейках памяти с начальным адресом N2.
Известное число членов массива дает возможность организовать циклы
суммирования, создав для этого счетчик циклов (например, регистр С).
Для хранения младшего байта промежуточных сумм и конечной суммы
выгодно использовать аккумулятор, а для хранения старшего байта один
из регистров общего назначения (например, регистр В). Данные следует
суммировать последовательно с младшим байтом суммы и при каждом
суммировании определять отсутствие или наличие переноса. При наличии
переноса старший байт суммы следует увеличить на единицу. Для
пересылки данных из памяти в аккумулятор целесообразно использовать
косвенную адресацию при помощи регистровой пары HL.
Алгоритм программы может выглядеть следующим образом:
1) Обнулить регистр хранения младшего байта суммы.
2) Обнулить регистр хранения старшего байта суммы.
3) Организовать косвенную адресацию данных.
4) Сложить данные с младшим байтом промежуточной суммы.
5) Если нет переноса, перейти к пункту 7.
6) Увеличить старший байт суммы на единицу.
7) Увеличить адрес данных.
8) Уменьшить число в счетчике циклов.
9) Если счетчик циклов не равен 0, то перейти к п.4.
10) Переслать младший байт суммы в память.
11) Переслать старший байт суммы в память.
-16-
ЛАБОРАТОРНАЯ РАБОТА N6 УМНОЖЕНИЕ ДВОИЧНЫХ ЧИСЕЛ
1.
Цель работы.
Закрепить навыки написания программ на языке ассемблера.
2. Описание лабораторной установки.
В работе используется УМК или "Микролаб" без дополнительных устройств.
3. Домашняя подготовка.
3.1. Изучить методы умножения двоичных чисел, рассмотренные в п.5.
3.2. Составить программы на языке ассемблера, реализующие оба метода.
4. Рабочее задание.
4.1. Перевести написанные программы в машинные коды. При этом
начальные адреса программ выбрать по собственному усмотрению.
4.2. Ввести в ОЗУ коды команд первой программы и произвести умножение
двух чисел, указанных преподавателем.
4.3. Произвести умножение тех же чисел вручную и сравнить результаты.
4.4. Ввести в ОЗУ коды команд второй программы, произвести умножение и
проверить результат.
5. Указания и методические рекомендации.
У большинства микропроцессоров, широко используемых в
различных устройствах, в системе команд нет команды умножения. В таких
случаях, при необходимости умножать числа, составляют специальные
программы. Существует много различных алгоритмов умножения двоичных
чисел. В данной работе предлагаются для изучения два из них.
Рассмотрим первый, самый простой из всех существующих алгоритмов
умножения чисел. Этот алгоритм выражается в сложении нескольких
одинаковых чисел. Например, три умножить на пять значит найти сумму
пяти одинаковых чисел равных трем. Т.е. 3*5 = 3 + 3 + 3 + 3 + 3.
Программа, реализующая такой алгоритм, имеет наименьшую длину и
довольно быстро работает, если множитель небольшой.
Процесс умножения по такому алгоритму имеет следующую
последовательность действий:
1) Обнуление суммы;
2) Анализ множителя. Если множитель = 0, то конец вычисл.;
3) Прибавить к сумме множимое;
4) Отнять от множителя единицу;
5) Анализ множителя. Если множитель не равен 0, то переход к пункту 3.
Составленная программа должна быть рассчитана на умножение однобайтных
чисел. При этом результат может быть двухбайтовым числом. Поэтому для
сложения рекомендуется использовать команду двухбайтного сложения DAD.
Второй алгоритм - один из алгоритмов умножения путем сложения и
сдвига. Чтобы понять суть этого алгоритма сначала рассмотрим как
умножение проводится вручную. Пусть нужно умножить число 000100012
(1710) на 000011002 (1210).
-17-
Вычисления будут выглядеть
00010001
00000000
-------00000000
00010001
00010001
00000000
00000000
00000000
00000000
--------------000000011001100
следующим образом:
множимое 00001100 множитель
первое частичное произведение
второе частичное произведение
третье частичное произведение
четвертое частичное произведение
пятое частичное произведение
шестое частичное произведение
седьмое частичное произведение
восьмое частичное произведение
сумма
При умножении получено восемь частичных произведений, поскольку
множитель содержит 8 разрядов. Первые два частичных произведения
включают только нули, так как первые два разряда множителя равны 0.
Третье частичное произведение -копия множимого. Разница между ними
заключается лишь в том, что копия сдвинута относительно множимого на
два двоичных разряда влево, поскольку для получения этого частичного
произведения в качестве множителя используется значение третьего
разряда. Четвертое частичное произведение также является копией
множимого, смещенной относительно последнего на три двоичных разряда
влево. Частичные произведения с пятого по восьмое состоят только из
нулей, так как соответствующие множители, участвующие в формировании
произведений, - двоичные нули. Сложение всех частичных произведений в
данном примере не сопровождается переносом, однако его возникновение
не исключено. Результат с учетом возможного переноса в старший разряд
может занимать 16 позиций.
Перечислим основные правила умножения путем сдвига и сложения:
1. Формирование первого частичного произведения. Если значение
первого разряда множителя равно 0, то и результат равен 0, если
значение этого разряда равно I, то результат является копией
множимого.
2. Правило сдвига. При использовании очередного разряда множителя для
формирования частичного произведения производится сдвиг множимого на
один разряд влево.
3. Правило сложения. Каждый раз, когда значение разряда множителя
равно I, к результату необходимо прибавить множимое, расположенное в
позиции, определенной правилом сдвига.
4. Определение результирующего произведения. Искомое произведение
есть результат выполнения всех операций сдвига и сложения.
Алгоритм программы, реализующей этот метод, может быть следующим:
1) Обнуление суммы частичных произведений;
2) Анализ сомножителей. Если хоть один из сомножителей равен 0, то
конец вычислений;
3) Анализ очередного разряда множителя. Если он не равен О, то к сумме
частичных произведений прибавить множимое;
4) Сдвиг множимого влево на один разряд;
5) Проверка конца вычислений. Если не конец, то переход к п.3.
При умножении восьмиразрядных чисел множимое и сумма частичных
произведений должны храниться в двухбайтовых регистровых парах, так
-18-
как их длина в процессе вычислений может оказаться 16 бит.
Рекомендуется следующим образом использовать регистры: (С) множитель, (DE) - множимое, (HL) - сумма частичных произведений.
Для сдвига влево двухбайтового числа у данного процессора нет
специальной команды. Здесь можно воспользоваться тем свойством
двоичных чисел, что для них умножение на 2 (т.е. сумма с самим собой)
аналогично сдвигу влево на один разряд. Поэтому сдвиг числа в
регистровой паре DE можно осуществить следующей последовательностью
команд:
XCHG;
DAD H;
XCHG.
Анализировать очередной разряд множителя можно следующим образом.
Произвести сдвиг его вправо через признак переноса. При этом младший
разряд множителя запишется в признак переноса. Анализировать же
признак переноса можно просто командами JC или JNC ЕСЛИ произвести такой
сдвиг еще раз, то теперь признак переноса будет содержать значение
второго разряда множителя. Таким образом можно проанализировать все
разряды множителя.
Проверку конца цикла можно делать разными способами. Первый способ это организовать в неиспользуемом регистре (например, регистре В)
счетчик числа проведенных сдвигов влево множимого. Для этого в регистр
В следует занести число разрядов множителя и после каждого сдвига
влево множимого уменьшать счетчик на единицу. Вычисления следует
продолжать до тех пор, пока в счетчике не окажется 0.
Другой способ проверки конца вычислений заключается в проверке на ноль
множителя. После каждого сдвига вправо множитель уменьшается (для
этого перед сдвигом нужно очищать признак переноса С, т.к. в старший
разряд множителя будет записываться содержимое признака переноса).
После анализа старшего разряда множителя, множитель становится равным
нулю.
-19-
ПРИЛОЖЕНИЕ I УПРАВЛЕНИЕ ДИСПЛЕЕМ
1. Семисегментный код.
В МП комплектах УМК и "Микролаб" в качестве дисплея используется набор
из семисегментных индикаторов. В УМК набор из шести, а в "Микролабе"
из восьми индикаторов. Вид символа, выводимого на индикаторе, задается
байтом данных, в котором указывается, какие сегменты должны светиться.
Каждый бит этого байта соответствует определенному сегменту индикатора. Это соответствие показано на Рис.П.1.1. Сегмент светится в том
случае, когда соответствующий ему бит установлен в "1".
Например, надо высветить букву "А". Для этого должны светиться
сегменты a,b,c,e,f,g. Байт данных в этом случае будет иметь вид:
01110111B = 77Н.
2. Выбор индикатора.
Выбор индикатора для высвечивания символа в УМК и "Микролабе"
осуществляется по разному. В УМК для управления дисплеем имеются два
порта. В один из них, с адресом F9, выводится байт, содержащий
семисегментный код высвечиваемого символа. Байт, выведенный в порт с
адресом F8 определяет, в каких индикаторах должен быть выведен этот
символ. Соответствие между битами байта выводимого в порт F8, и номерами индикаторов показано на Рис.П.1.2. Символ выводится на данный
индикатор, если соответствующий этому индикатору бит установлен в "I".
Например, надо высветить символ в 1-й и 3-й индикаторы. Тогда байт
выводимый в порт F8 будет иметь вид: 00000101B = 05Н.
Чтобы в каждом индикаторе вывести свой символ, надо сначала первый
символ вывести в первый индикатор, затем его погасить. Вывести второй
символ во второй индикатор, погасить его и т.д. После вывода
последнего символа погасить его и вернуться к первому символу. То есть
символы выводятся по очереди друг за другом. Но, так как скорость смеш символов
довольно большая, глаз видит непрерывное свечение различных символов.
В "Микролабе" каждому индикатору соответствует ячейка памяти, где
хранится семисегментный код, управляющий свечением сегментов данного
индикатора. Информация из этих ячеек посылается на индикаторы при
помощи специальной схемы. Соответствие адреса ячейки памяти номеру
индикатора показано на Рис.П.1.3.
Рис. П.1.1. Соответствие битов семисегментного кода сегментам
индикатора.
Например, символ надо вывести в 1-й и 3-й индикаторы, для этого
семисегментный код данного символа надо занести в ячейки 83F8 и 83FА.
-20-
Рис. П.I.2. Соответствие битов кода номерам индикаторов УМК.
номер индикатора
слева направо
1
2
3
4
5
6
7
8
адрес ячейки памяти 83F8 83Р9 83FA 83FВ 83FС 83FD 83FЕ 83FF
Рис. П.1.3. Соответствие номеров индикаторов "Микролаба" ячейкам
памяти.
-21-
ПРИЛОЖЕНИЕ 2 СИСТЕМА КОМАНД МИКРОПРОЦЕССОРА КР580ВМ80
В этом приложении собрана информация о мнемокодах, свойствах и кодах
команд.
Приняты следующие условные обозначения:
r,r1,r2 - один из регистров A,B,C,D,E,H,L,M. (Следует помнить, что
регистр М в действительности регистром не является. Это ячейка памяти,
адрес которой хранится в регистровой паре HL);
rp
адрес
порт
данные
(А)
(r)
(rp)
((HL))
PC
PCH,PCL
rh,rl
(С)
(F)
в
-
одна из регистровых пар BC,DE,HL или SP;
адрес памяти (2 байта);
адрес порта внешнего устройства (I байт);
I байт данных (для команды LXI 2 байта);
содержимое аккумулятора;
содержимое регистра;
содержимое пары регистров;
содержимое ячейки памяти, адрес которой находится
паре регистров HL, т.е. содержимое регистра M;
программный счетчик;
старший и младший байты программного счетчика;
старший и младший байты пары регистров;
признак переноса;
содержимое регистра признаков.
-22-
Команды пересылки данных и ввода-вывода.
MOV r1,r2
пересылка из регистра в регистр;
(r1) <— (r2);
Коды команд MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
А,А
А,В
А,С
A,D
A,E
A,H
A,L
A,M
E,A
E,B
E,C
E,D
E,E
E,H
E,L
E,M
7F
78
79
7А
7B
7C
7D
7E
5F
58
59
5A
5B
5C
5D
5E
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
В,А
В,В
В,С
B,D
B,E
B,H
B,L
B,M
H,A
H,B
H,C
H,D
H,E
H,H
H,L
H,M
MVI r,данные
47
40
41
42
43
44
45
46
67
60
61
62
63
64
65
66
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
С,А
С,В
С,С
C,D
C,E
C,H
C,L
C,M
L,A
L,B
L,C
L,D
L,E
L,H
L,L
L,M
4F
48
49
4A
4B
4C
4D
4E
6F
68
69
6A
6B
6C
6D
6E
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
D,A
D,B
D,C
D,D
D,E
D,H
D,L
D,M
M,A
M,B
M,C
M,D
M,E
M,H
M,L
57
50
51
52
53
54
55
56
77
70
71
72
75
74
75
загрузка регистра константой;
(r) <— данные;
Коды команд MVI
MVI
MVI
MVI
A, данные
B, данные
C, данные
3E
06
0E
MVI
MVI
MVI
D, данные
Е, данные
H, данные
16
1E
26
MVI L, данные
MVI M, данные
LXI rp,данные загрузка пары регистров;
(rp) <— данные;
Коды команд LXI
B,данные 01 LXI H,данные 21
LXI D,данные 11 LXI SP,данные 31
LXI
STA адрес
32
STAX В
02
STAX D
12
LDA адрес
3A
LDAX В
0A
LDAX D
1A
пересылка из аккумулятора в память;
(адрес) <— (А);
пересылка из аккумулятора в память;
((ВС)) <— (А);
пересылка из аккумулятора в память;
((DE)) <— (А);
пересылка из памяти в аккумулятор;
(А) <-- (адрес);
пересылка из памяти в аккумулятор;
(А) <-- ((ВО);
пересылка из памяти в аккумулятор;
(А) <-- (<DE).);
2E
36
-23-
SHLD адрес 22
LHLD адрес 2А
XCHG
ЕВ
IN порт
DB
OUT порт
D3
пересылка содержимого регистров HL в память;
(адрес) <— (L);
(адрес+1) <— (H);
пересылка из памяти в пару регистров HL;
(L) <- (адрес);
(H) <— (адрес+1);
обмен между регистровыми парами HL и DE;
(HL) <--> (DE);
ввод из порта;
(А) <— (порт);
вывод в порт;
(порт) <— (А);
Арифметические команды.
ADD r
сложение содержимого регистра с аккумулятором;
(А) <-- (А) + (r);
Коды команд ADD
ADD A
ADD В
87
80
ADD С
ADD D
81
82
ADD E
ADD H
83
84
ADD L
ADD M
85
86
ADC r
сложение содержимого регистра с аккумулятором и с
признаком переноса;
(А) <— (А) + (r) + (C);
Коды команд ADС
ADC А
ADC В
SUB r
8Р
88
ADC С
ADC D
89
8А
ADC Е
ADC Н
8В
8С
ADC L
ADC M
8D
8E
вычитание содержимого регистра из аккумулятора;
(А) <— (А) - (r);
Коды команд SUB
SUB А
SUB В
SBB r
97
90
SUB С
SUB D
91
92
SUB E
SUB H
93
94
SUB L
SUB M
95
96
вычитание из аккумулятора содержимого регистра и
признака переноса;
(А) <-- (А) -,(r) - (C);
Коды команд SBB
SBB A
SBB В
9F
98
SBB С
SBB D
99
9А
SBB Е
SBB Н
9В
9С
SBB L
SBB M
9D
9E
-24-
ADI данные C6
сложение аккумулятора с константой;
(А) <-- (А) + данные;
ACI данные СЕ сложение аккумулятора с константой и с
признаком переноса;
(А) <— (А) + данные + (C);
SUI данные D6 вычитание из аккумулятора константы;
(А) <— (А) - данные;
SBI данные DE вычитание из аккумулятора константы и признака
переноса;
(А) <-- (А) - данные - (с);
INR r
инкремент (увеличение на 1) регистра;
(r) <— (r) + 1;
Коды команд INR
INR A
INR В
DCR r
3С
04
INR С
INR D
0С
14
INR Е
INR Н
1С
24
INR L
INR М
2C
34
декремент (уменьшение на I) регистра;
(r) <— (r) - 1;
Коды команд DCR
DCR A
DCR В
INX rp
3D
05
DCR С
DCR D
0D
15
DCR E
DCR H
1D
25
DCR L
DCR M
2D
35
инкремент пары регистров;
(rp) <— (rp) + 1;
Коды команд INX
INX В
DCX rp
03
INX D
13
INX H
23
INX SP
33
DCX SP
3B
декремент пары регистров;
(rp) <— (rp) - 1;
Коды команд DСX
DCX В
0B
DCX D
1B
DCX H
2B
DAD rp
сложение содержимого пары регистров с со
держимым пары HL;
(HL) <— (HL) + (rp);
Коды команд DAD
DAD В
DAA 27
сложения;
09
DAD D
19
DAD H
29
DAD SP
десятичная коррекция аккумулятора после
39
-25-
Логические команды.
ANA r
логическое "И" аккумулятора с регистром;
(А) <-- (А) ∩ (r);
Коды команд ANA
ANA А
ANA В
ORA r
А7
А0
ANA С
ANA D
A1
A2
ANA E
ANA H
A3
A4
ANA L
AHA M
A5
A6
логическое "ИЛИ" аккумулятора с регистром;
(А) <— (A) U (r),
Коды команд ORA
ORA A
ORA В
XRA r
B7
В0
ORA С
ORA D
B1
В2
ORA Е
ORA Н
В3
В4
ORA L
ORA М
B5
В6
исключающее "ИЛИ" аккумулятора с регистром;
(А) <-- (А) * (r);
XRA A AF
XRA B A8
Коды команд XRA
XRA C A9
XRA E AB
XRA D AA
XRA H AC
XRA L AD
XRA M AE
СМР r
сравнение аккумулятора с регистром (содержимое
аккумулятора не изменяется);
(А) - (r);
СМР А
СМР В
ВF
В0
СМР С
СМР D
Коды команд СМР
B1
СМР Е В3
ВA
СМР Н В4
CMP L
СМР М
ВD
В6
ANI данные E6 логическое "И" аккумулятора с константой;
(А) <-- (А) ∩ данные;
ORI данные F6 логическое "ИЛИ" аккумулятора с константой;
(А) <— (A) U данные;
XRI данные ЕЕ исключающее "ИЛИ" аккумулятора с константой;
(А) <— (А) * данные;
CPI данные FE сравнение аккумулятора с константой (содержимое
аккумулятора не изменяется);
(А) -(r);
СМА
2F инвертирование аккумулятора;
CMC
3F инвертирование признака переноса;
STC
37 установка признака переноса в 1;
RLC
07 циклический сдвиг влево;
(А0) <-- (А7)
(С) <-- (А7);
RRC
0F циклический сдвиг вправо;
(А7) <— (А0)
(С) <— (А0);
-26-
RAL
17 циклический сдвиг влево через признак переноса;
(С) <— (А7)
(АО) <— (С);
RAR
1F циклический сдвиг вправо через признак переноса;
(C) <— (А0) (А7) <— (C);
Команды передачи управления и специальные команды.
JMP адрес C3 безусловный переход;
(PC) <— адрес;
JNZ адрес С2 переход, если был ненулевой результат, т.е.
в регистре признаков бит Z = 0;
JZ адрес СА переход, если был нулевой результат, т.е. в
регистре признаков бит Z = 1;
JNC адрес D2 переход, если не было переноса, т.е. в регистре
признаков бит C = 0;
JC адрес DA переход, если был перенос, т.е. в регистре
признаков бит с = I;
JP0 адрес Е2 переход, если результат содержит нечетное
число единиц, т.е. в регистре признаков бит Р = 0;
JPE адрес ЕА переход, если результат содержит четное число единиц,
т.е. в регистре признаков бит Р = 1;
JP адрес F2 переход, если результат положительный, т.е.
в регистре признаков бит S = 0;
JM адрес FA переход, если результат отрицательный, т.е.
в регистре признаков бит S = 1;
CALL адрес CD безусловный вызов подпрограммы;
(РC) <— адрес,
((SP)-1) <— (РСН),
((SP)-2) <-- (PCL), (SP) <— (SP)-2;
CNZ адрес С4 вызов подпрограмм, если был ненулевой результат, т.е. в
регистре признаков бит z=I;
CZ адрес CC вызов подпрограммы, если был нулевой результат, т.е. в
регистре признаков бит Z=0;
CNC адрес D4 вызов подпрограммы, если не было переноса,
т.е. в регистре признаков бит с = 0;
CC адрес DC вызов подпрограммы, если был перенос, т.е.
в регистре признаков бит с = I;
GP0 адрес Е4 ВЫЗОВ подпрограммы, если результат содержит
нечетное число единиц, т.е. в регистре признаков бит P = 0;
СРЕ адрес ЕС вызов подпрограммы, если результат содержит
четное число единиц, т.е. в регистре признаков бит P = 1;
СР адрес F4 вызов подпрограммы, если результат положительный, т.е. в
-27-
регистре признаков бит S=0;
CМ адрес FC вызов подпрограммы, если результат отрицательный, т.е. в
регистре признаков бит S=I;
RET C9 безусловный возврат из подпрограммы;
(PCL) <— ((SP)),
(РСН) <— ((SP)+1),
(SP) <-- (SP)+2;
RNZ C0 возврат из подпрограммы, если был ненулевой
результат, т.е. в регистре признаков бит Z = 1;
RZ C8 возврат из подпрограммы, если был нулевой
результат, т.е. в регистре признаков бит Z = 0;
RNC D0 возврат из подпрограммы, если не было переноса, т.е. в регистре
признаков бит с = 0;
RC D8 возврат из подпрограммы, если был перенос,
т.е. в регистре признаков бит с = I;
RP0 E0 возврат из подпрограммы, если результат содержит нечетное число
единиц, т.е. в регистре признаков бит P = 0;
RPE E8 возврат из подпрограммы, если результат содержит четное число
единиц, т.е. в регистре признаков бит P = 1;
RP F0 возврат из подпрограммы, если результат положительный, т.е. в
регистре признаков бит S = 0;
НМ F8 возврат из подпрограммы, если результат отрицательный, т.е. в
регистре признаков бит S = 1;
RST n
вызов подпрограммы прерываний;
((SP)-1) <-- (РСН), ((SP)-2) <— (PCL),
(SP) <-- (SP)-2,
(PC) <— 8 * n;
Коды команд RST
RST 0
RST 1
C7
CF
RST 2
RST 3
D7
DF
RST 4
RST 5
17
EF
RST 6
RST 7
F7
FF
PGHL
E9 загрузка программного счетчика содержимым регистров HL;
(РС) <-- (HL);
E1
FВ разрешение прерываний;
D1
F3 запрещение прерываний;
HLT
76 останов;
NOP
00 нет операции;
-28-
Команды с обращением к стеку
PUSH rp
занесение в стек содержимого пары регистров;
((SP)-1) <-- (rh),
((SP)-2) <-- (rl),
(SP) <— (SP)-2;
Коды команд PUSH
PUSH В C5
POP rp
PUSH D D5
PUSH H E5
PUSH PSW F5
выборка из стека и загрузка пары регистров;
(rl) <— ((SP)),
(rh) <— ((SP)+1,
(SP) <-- (SP)+2;
Коды команд POP
POP В C1
XTHL
SPHL
POP D D1
POP H E1
POP PSW F1
Е3 обмен между вершиной стека и парой регистров HL;
(L) <--> ((SP)),
(Н) <--> ((SP)+1;
F9 загрузка указателя стека содержимым пары HL.
Команды, устанавливающие признаки результатов
признаки
команды
r
r
r
PSW
ADC r
SBB r
DAA
CPI данные
ADI
ACI
SUI
SBI
данные
данные
данные
данные
все признаки (C) = 0 ANA
XRA
r
r
ORA r
ORI данные
ANI
XRI
данные
данные
все признаки, кроме
C
INR
r
DCR r
только C
RLC
STC
все признаки
ADD
SUB
CMP
POP
RRC
CMC
RAL
DAD rp
RAR
-29-
ПРИЛОЖЕНИЕ 3
ПРОГРАММИРОВАНИЕ МИКРОСХЕМЫ ПАРАЛЛЕЛЬНОГО ИНТЕРФЕЙСА КР580ВВ55
Микросхема КР580ВВ55 является программируемым параллельным
интерфейсом. Она может использоваться для связи микропроцессорной
системы с различными внешними устройствами. Микросхема имеет три
восьмиразрядных порта (регистра) ввода-вывода - А, В, С и регистр
управления. Порт С состоит из двух четырехразрядных портов.
Микросхема может работать в трех режимах - 0, 1 и 2. Режимы 1 и 2 в
данных работах не используются и поэтому здесь не рассматриваются. В
режиме 0 каждый порт может независимо от остальных настраиваться на
ввод или на вывод информации. Для настройки микросхемы на один из трех
режимов и для настройки портов на ввод или вывод используется
управляющее слово, которое вводится в регистр управления командой
OUT адрес. Адрес регистра управления параллельного интерфейса в УМК 93Н, а в "Микролабе" - FBH. Использование каждого разряда управляющего
слова показано на Рис.П.3.1.
Рис. П.3.1. Управляющее слово микросхемы КР580ВВ55 в режиме О.
Например, управляющее слово 1001 0000 (9ОН) настраивает порт А на ввод
данных в микропроцессор, а остальные порты на вывод.
Каждый порт имеет свой адрес и доступен через команда OUT и IN. В УМК
к порту В подсоединены светодиоды. Адрес этого порта 91H. В
"Микролабе" светодиоды подсоединены также к порту В, адрес его - F9H.
-30-
СОДЕРЖАНИЕ
Краткое описание учебного микропроцессорного комплекта ..............
Краткое описание учебной микролаборатории "Микролаб" ................
Лабораторная работа №1. Ввод и выполнение программы .................
Лабораторная работа №2. Модификация программ ........................
Лабораторная работа №3. Арифметические и логические команда
микропроцессора .....................................................
Лабораторная работа №4. Сложение и вычитание многобайтовых чисел ....
Лабораторная работа №5. Работа с массивами данных ...................
Лабораторная работа №6. Умножение двоичных чисел ....................
Приложение 1. Управление дисплеем ...................................
Приложение 2. Система команд микропроцессора КР580ВМ80 ..............
Приложение 3. Программирование микросхемы параллельного интерфейса
КР580ВВ55 ...........................................................
I
4
7
9
12
14
17
20
25
27
37
Download