rgz
.pdf
|
41 |
|
2.4. Текст программы |
DELA .EQU 0429h |
; адрес п/п задержки 1 мс |
DELB .EQU 0430h |
; адрес п/п задержки, указанной в BC |
NDSP .EQU 0410h |
; адрес области номеров элементов сканироания |
|
; (строк или индикаторов) |
DCD_K .EQU 0450h |
; адрес п/п декодирования кода клавиши по строке и |
|
; столбцу |
DCDT .EQU 0400h |
; адрес начала таблицы декодирования |
MULTIPLY .EQU 04E1h |
; адрес п/п умножения (E)×(D)(BC) |
|
; |
|
|
.org 0800h |
|
|
; |
Основная программа |
MAIN:
;
;****************** Ввод первого сомножителя
|
LXI D,MES_0 |
; |
|
CALL LOAD_DDSP ; |
|
MN_1: |
|
|
|
CALL SCAN_KD ;сканирование сообщения из DDSP до нажатия |
|
|
CPI 10h |
;│нажата цифровая клавиша? (0..F) |
|
JNC MN_0 |
;│ |
; |
Когда нажата цифровая клвиша |
|
|
MOV B,A ; копируем код нажатия в B |
|
; |
|
|
|
LDA DIG_0 |
;│ модификация |
|
STA DIG_1 |
;│ буфера кодов цифр |
|
MOV A,B |
;│ вводимого однобайтного числа |
|
STA DIG_0 |
;│ |
; |
|
|
|
LDA DDSP+2 |
;│ модификация |
|
STA DDSP+1 |
;│ буфера символов цифр |
|
MOV A,B |
;│ вводимого однобайтного числа |
|
CALL DCD |
;│ из области DDSP |
|
STA DDSP+2 |
; |
; |
|
|
|
JMP MN_1 |
|
; |
Когда нажата нецифровая клвиша |
|
MN_0: |
|
|
|
CPI 4Ch |
; нажата клавиша "пробел"? |
|
JNZ MN_1 |
|
; |
Когда нажата клавиша "пробел" |
|
|
LDA DIG_1 |
|
42
RLC
RLC
RLC
RLC MOV B,A
LDA DIG_0 ADD B STA MUL_1
;
;****************** Ввод второго сомножителя
|
MVI A,08h |
|
|
STA DDSP+4 |
|
|
STA DDSP+5 |
|
MN_3: |
|
|
|
CALL SCAN_KD ;сканирование сообщения из DDSP до нажатия |
|
|
CPI 10h |
;│нажата цифровая клавиша? (0..F) |
|
JNC MN_2 |
;│ |
; |
Когда нажата цифровая клавиша |
|
|
MOV B,A |
; копируем код нажатия в B |
; |
|
|
|
LDA DIG_0 |
;│ модификация |
|
STA DIG_1 |
;│ буфера кодов цифр |
|
MOV A,B |
;│ вводимого однобайтного числа |
|
STA DIG_0 |
;│ |
; |
|
|
|
LDA DDSP+5 |
;│ модификация |
|
STA DDSP+4 |
;│ буфера символов цифр |
|
MOV A,B |
;│ вводимого однобайтного числа |
|
CALL DCD |
;│ из области DDSP |
|
STA DDSP+5 |
; |
; |
|
|
|
JMP MN_3 |
|
; |
Когда нажата нецифровая клвиша |
|
MN_2: |
|
|
|
CPI 4Ch |
; нажата клавиша "пробел" |
|
JNZ MN_3 |
|
; |
Когда нажата клавиша "пробел" |
|
|
LDA DIG_1 |
|
RLC
RLC
RLC
RLC
MOV B,A
43
LDA DIG_0 ADD B STA MUL_2
;
;**************** Умножение и вывод результата
LDA MUL_1 MOV E,A LDA MUL_2 MOV D,A
CALL MULTIPLY ; умножение (E)*(D)(BC) MOV A,C
STA RES_0
MOV A,B
STA RES_1
;
LXI D,MES_1 CALL LOAD_DDSP
;
LDA RES_0 ANI 0Fh CALL DCD STA DDSP+3 LDA RES_0 ANI 0F0h RLC
RLC
RLC
RLC
CALL DCD
STA DDSP+2
;
LDA RES_1 ANI 0Fh CALL DCD STA DDSP+1 LDA RES_1 ANI 0F0h RLC
RLC
RLC
RLC
CALL DCD
STA DDSP
44
;
CALL SCAN_KD ;сканирование сообщения из DDSP до нажатия
CPI 8Ch JNZ MAIN RST 7
;
; Сканирование сообщения из DDSP до нажатия
;Входные параметры: M[DDSP..DDSP+5]
;Выходные параметры: A и Key_Code – код нажатой клавиши
;Подпрограммы: DELA, DELB, DCD_K
;
SCAN_KD:
LXI D,DDSP ;установка в исходное состояние указателя ячеек DDSP LXI H,NDSP ;установка в исходное состояние указателя элементов
;сканирования
SC_02: ; выбор очередной строки клавиатурной матрицы и MOV A,M ; очередного индикатора дисплея;
; |
|
|
|
OUT 0F8h |
; вывод через порт А |
|
|
LDAX D |
; |
|
|
OUT 0F9h |
;вывод через порт В |
|
|
IN 0FAh |
; прием кода столбца из порта с PPI |
|
|
CMA |
; инверсия А |
|
|
ANI 74h |
;наложение маски на используемые биты |
76543210 |
|
; |
|
|
01110100 |
JNZ SC_03; |
|
|
|
INX H |
;инркемент указателя ячеек DDSP(указателя элементов |
||
|
;сканирования) |
|
|
INX D |
; Н+1; D+1; |
|
|
CALL DELA |
; пауза 1 мс |
|
|
MOV A,L |
; |
|
|
CPI 16h |
; |
|
|
JZ SCAN_KD |
; |
|
|
JMP SC_02 |
; |
|
|
SC_03: |
|
|
|
STA C_Code |
; загрузка кода столбца в аккумулятор |
|
|
MOV A,M |
; размещение его в аккумуляторе |
|
|
STA L_Code |
; |
помещение в аккумулятор кода строки |
|
LXI B,0Ah |
; |
подавление дребезга, пауза 10 мс |
|
CALL DELB |
; |
|
|
SC_04: |
|
|
|
IN 0FAh |
; |
|
|
CMA |
; выявление факта отпускания клавиши |
|
|
45 |
ANI 74h |
; |
JNZ SC_04 |
; |
LDA L_Code |
; |
MOV H,A |
; сохранение в память кода строки и столбца |
LDA C_Code |
; |
MOV L,A |
; |
CALL DCD_K |
; декодирование кода клавиши |
MOV A,H |
; |
STA Key_Code ; сохранение кода клавиши
RET
;
; Декодирование кода цифры для получения кода еѐ символа ;Входные параметры: A – код циры (0..F)
;Выходные параметры: A – кода еѐ символа ;Подпрограммы:
DCD:
LXI B,DCDT ; загрузка в BC адреса начала таблицы декодирования ADD C ; │ получение адреса ячейки, где
MOV C,A ; │ хранится код символа декодируемой цифры LDAX B ; выборка из таблицы
RET
;
;Загрузка DDSP сообщением указанным в DE
;Входные параметры: DE – адрес начала загружаемого сообщения
;Выходные параметры: M[DDSP..DDSP+5]
LOAD_DDSP: |
|
|
|
|
LXI H,DDSP |
|
|
|
MVI C,6h |
|
|
LD_LOOP: |
|
|
|
|
LDAX D |
;загружаем очередной байт исх сообщения в A |
|
|
MOV M,A |
;сохраняем очередной байт исх сообщения в DDSP |
|
|
INX H |
;указать на следующий байт области DDSP |
|
|
INX D |
;указать на следующий байт области исх сообщения |
|
|
DCR C |
;декремент счѐтчика копируемых байт |
|
|
JNZ LD_LOOP |
;проверка достижения счѐтчиком нуля |
|
|
RET |
|
|
; |
|
|
|
; |
Область данных |
|
|
.org 0B00h |
|
|
|
L_Code: .db 0 |
; код строки |
||
C_Code: .db 0 |
; код столбца |
||
Key_Code: .db 0 |
; код клавиши |
||
DIG_0: .db 0 |
; код младшей цифры байта вводимого числа |
46
DIG_1: .db 0 ; код старшей цифры байта вводимого числа MUL_1: .db 0 ; первый сомножитель
MUL_2: .db 0 ; второй сомножитель RES_0: .db 0 ; младший│байты результата RES_1: .db 0 ; старший │умножения
;
.org 0B8Ah; DDSP:
.db 00,00,00,00,00,00; Область декодированного сообщения
MES_0:
.db 00,08,08,00,00,00 ; Сообщение исходное
MES_1:
.db 00,00,00,00,00,73h ; Последний экран
.end
3. Варианты заданий РГЗ
Представляемые далее варианты привязаны к типу учебной микро-
ЭВМ.
В одной части заданий (в большей) поставленная задача может быть одинаково успешно решена и на УМК-80 и на УМПК-80, поэтому задания сформулированы абсолютно одинаково и различаются лишь типом микроЭВМ.
Другая часть заданий – задачи зависимые от типа учебной микро-ЭВМ. Они могут быть выполнены только на машине конкретного типа.
Вариант N1
Разработать программу для УМК-80 просмотра и модификации содержимого ячеек памяти, начиная с задаваемого пользователем адреса. Предусмотреть возможность изменения направления перемещения по адресам.
Вариант N2
Разработать программу для УМПК-80 просмотра и модификации содержимого ячеек памяти, начиная с задаваемого пользователем адреса. Предусмотреть возможность изменения направления перемещения по адресам.
Вариант N3
Разработать программу для УМК-80 сложения однобайтных чисел вводимых с пульта с последующим выводом результата сложения на дисплей. Количество слагаемых должно задаваться пользователем перед вводом слагаемых. Максимальное количество слагаемых – 255.
Вариант N4
Разработать программу для УМПК-80 сложения однобайтных чисел вводимых с пульта с последующим выводом результата сложения на дисплей.
47
Количество слагаемых должно задаваться пользователем перед их вводом. Максимальное количество слагаемых – 255.
Вариант N5
Разработать программу для УМК-80 вычитания многобайтных чисел вводимых с пульта с последующим выводом результата вычитания на дисплей. Максимальное число байтов – 255. Количество байтов в числах должно задаваться пользователем перед их вводом.
Вариант N6
Разработать программу для УМПК-80 вычитания многобайтных чисел вводимых с пульта с последующим выводом результата вычитания на дисплей. Максимальное число байтов – 255. Количество байтов в числах должно задаваться пользователем перед их вводом.
Вариант N7
Разработать программу для УМК-80 просмотра последовательно расположенных ячеек памяти из области, начальный адрес которой определяется пользователем. Переход к следующей ячейке реализовать ручной (по нажатии клавиши).
Вариант N8
Разработать программу для УМПК-80 просмотра последовательно расположенных ячеек памяти из области, начальный адрес которой определяется пользователем. Переход к следующей ячейке реализовать ручной (по нажатии клавиши).
Вариант N9
Разработать программу для УМК-80 просмотра последовательно расположенных ячеек памяти из области, начальный адрес которой определяется пользователем. Переход к следующей ячейке реализовать ручной (по нажатии клавиши).
Вариант N10
Разработать программу для УМПК-80 просмотра последовательно расположенных ячеек памяти из области, начиная с адреса 0. Переход к следующей ячейке реализовать ручной (по нажатии клавиши) и в обеих направлениях изменения адреса.
Вариант N11
Разработать программу для УМК-80 просмотра последовательно расположенных ячеек памяти из области, начиная с адреса 0. Переход к следующей ячейке реализовать ручной (по нажатии клавиши) и в обеих направлениях изменения адреса.
Вариант N12
Разработать программу для УМПК-80 просмотра десяти последовательно расположенных ячеек памяти из области, начальный адрес которой
48
определяется пользователем. Переход к следующей ячейке реализовать автоматический с паузой 5 с.
Вариант N13
Разработать программу для УМК-80 просмотра и модификации регистров микропроцессора. Переход к следующему регистру реализовать ручной (по нажатии клавиши) и в обеих направлениях просмотра.
Вариант N14
Разработать программу для УМПК-80 просмотра и модификации регистров микропроцессора. Переход к следующему регистру реализовать ручной (по нажатии клавиши) и в обеих направлениях просмотра.
Вариант N15
Разработать программу для УМК-80 обеспечивающую выполнение следующих действий. Сначала ввод оператором содержимого регистров процессора. Затем показ содержимого регистров, причѐм, переход к следующему регистру должен производится автоматически с паузой 5 с.
Вариант N16
Разработать программу для УМПК-80 обеспечивающую выполнение следующих действий. Сначала ввод оператором содержимого регистров процессора. Затем показ содержимого регистров, причѐм, переход к следующему регистру должен производится автоматически с паузой 5 с.
Вариант N17
Разработать программу для УМК-80 преобразования исходного однобайтного числа, вводимого с пульта, из шестнадцатеричной формы представления в десятичную и обратно с показом результата преобразования на дисплее.
Вариант N18
Разработать программу для УМПК-80 преобразования исходного однобайтного числа, вводимого с пульта, из шестнадцатеричной формы представления в десятичную и обратно с показом результата преобразования на дисплее.
Вариант N19
Разработать программу для УМК-80 вычисления результата арифметической операции, выбираемой пользователем между умножением и делением, над двумя однобайтными числами, вводимыми с пульта, с последующим выводом результата на дисплей.
Вариант N20
Разработать программу для УМПК-80 вычисления результата арифметической операции, выбираемой пользователем между умножением и делением, над двумя однобайтными числами, вводимыми с пульта, с последующим выводом результата на дисплей.
49
Вариант N21
Разработать программу для УМК-80 вычисления результата арифметической операции, выбираемой пользователем между сложением и вычитанием, над двумя однобайтными числами, вводимыми с пульта, с последующим выводом результата на дисплей.
Вариант N22
Разработать программу для УМПК-80 вычисления результата арифметической операции, выбираемой пользователем между сложением и вычитанием, над двумя однобайтными числами, вводимыми с пульта, с последующим выводом результата на дисплей.
Вариант N23
Разработать программу для УМК-80 выполнения операции над однобайтным числом с последующим выводом результата на дисплей. Операция выбирается пользователем из двух возможных: 1) преобразование в двоичнодесятичную форму; 2) возведение в квадрат. Если выбран 2), обеспечить невозможность ввода исходного числа больше максимально допустимого.
Вариант N24
Разработать программу для УМПК-80 выполнения операции над однобайтным числом с последующим выводом результата на дисплей. Операция выбирается пользователем из двух возможных:
1)преобразование в двоично-десятичную форму;
2)возведение в квадрат.
Если выбран 2), обеспечить невозможность ввода исходного числа больше максимально допустимого.
Вариант N25
Разработать программу для УМК-80 выбора из меню одного из дейст-
вий:
1)показ сообщения из цифр 1, 2, 3, 4, 5, 6;
2)показ содержимого регистра A;
3)показ содержимого ячейки 0B00;
4)возврат в монитор.
Реализовать действия меню, завершая п. 1)–3) возвратом назад к повторному выбору.
Вариант N26
Разработать программу для УМПК-80 выбора из меню одного из дейст-
вий:
1)показ сообщения из цифр 1, 2, 3, 4, 5, 6;
2)показ содержимого регистра A;
3)показ содержимого ячейки 0B00;
4)возврат в монитор.
50
Реализовать действия меню, завершая п. 1)–3) возвратом назад к повторному выбору.
4. Требования к содержанию пояснительной записки
Состав пояснительной записки
Пояснительная записка должна содержать следующие обязательные
компоненты. |
|
|
1. |
Варианта задание РГЗ. |
|
2. |
Схемы программно-управляемых устройств |
в составе микро- |
ЭВМ. |
|
|
3.Блок-схемы алгоритмов программы и подпрограмм с комментариями
иобщим представлением.
4.Тексты программ и подпрограмм в мнемониках и машинных кодах.
5.Библиографический список.
Общие требования
Блок-схемы алгоритмов должны подробными настолько, чтобы одному действию блок-схемы соответствовало не более 3-4 команд из текстов листингов. При этом не следует и устанавливать жѐсткой привязки команд к действиям алгоритма, а наоборот – допускать альтернативность в реализации разных действий алгоритма.
Поторяющиеся фрагменты алгоритма допустимо и желательно подробно показывать один раз, а затем представлять их в виде процедуры.
Листинги подпрограмм должны предваряться "шапками", содержащими следующую информацию о представляемой подпрограмме:
имя подпрограммы; краткое описание действий подпрограммы;
представление входных параметров подпрограммы; представление выходных параметров подпрограммы; перечень подпрограмм вызываемых из данной подпрограммы.
Библиографический список
1.Микропроцессоры. В 3х книгах. Кн.3 Средства отладки, лабораторный практикум и задачник: Учебное пос. для вузов/ Под ред Л. Н. Преснухи-
на. – М.: Высш. шк., 1986.
2.МикроЭВМ: В 8 кн.: Практ. пособие / Под ред. Л. Н. Преснухина Кн.
7.Учебные стенды / Ю. И.Волков, В. Л. Горбунов и др. – М.: Высш.шк., 1988.
– 224с.