- •Содержание
- •Задание
- •2. Схемы программно-управляемых устройств в составе микро-эвм.
- •2.1 Дисплейная часть
- •2.2 Клавиатурная часть
- •Блок-схемы алгоритмов программы и подпрограмм
- •4. Тексты программ и подпрограмм в мнемониках и машинных кодах
- •4.1 Общее описание работы программы.
- •4.3. Подпрограмма: vibor
- •4.2. Программа: main
- •4.4. Подпрограмма monitor:
- •4.5. Подпрограмма: vvod
- •4.7. Подпрограмма sum:
- •4.8. Подпрограмма Data_to_Memory:
- •4.9. Подпрограмма Razn:
- •4.10. Подпрограмма error:
- •5. Список литературы
4.4. Подпрограмма monitor:
Входные параметры:
Регистровая пара DE - указатель на область памяти, где хранится строка для сканирования.
Выходные параметры:
Регистр А – код нажатой клавиши.
Перечень подпрограмм вызываемых из данной подпрограммы:
DCD, SDS, SPU, KIND.
Краткое описание действий подпрограммы:
Подпрограмма ждёт нажатия клавиши, сканируя тем временем, дисплей строкой, на которую указывает регистровая пара DE. После нажатия клавиши определяется её код и записывается в аккумулятор.
Код программы:
080C DF RST 3; Загрузка в DDSP
080D CD E9 01 CALL DCD; Кодирование
N1:
0810 CD C8 01 CALL SDS; Вывод сроки на экран
0813 CD 85 01 CALL SPU;
0816 CA 10 08 JZ l1;
0819 CD 4B 01 CALL KIND; Определение кода клавиши
081C C9 RET
4.5. Подпрограмма: vvod
Входные параметры: отсутствуют
Выходные параметры: 0B00 – введенное число
Используемые подпрограммы: LAMP, KIND.
Адрес |
Код команды |
Метка |
Мнемокод |
Комментарий |
08A0 |
CD 50 09 |
VVOD: |
CALL LAMP |
Загрузка п/п LAMP |
08A1 |
AF |
|
XRA A |
Очистка регистра А |
08A4 |
32 02 0B |
|
STA 0B02 |
Обнуление 0B02 |
08A7 |
CD 4B 01 |
M1: |
CALL KIND |
Загрузка п/п KIND |
08AA |
47 |
|
MOV B,A |
Запись числа из рег. А в рег. B |
08AB |
FE 83 |
|
CPI 83 |
Если нажата клавиша “ЗпУв” то идти к M2 |
08AD |
CA C7 08 |
|
JZ M2 |
|
08B0 |
3A 02 08 |
|
LDA 0B02 |
Загрузка предыдущего значения(единиц) |
08B3 |
32 F1 0B |
|
STA 0BF1 |
Вывод на HL1 десятков |
08B6 |
0F |
|
RRC |
Сдвиг на 4 бита влево для получения десятков |
08B7 |
0F |
|
RRC |
|
08B8 |
0F |
|
RRC |
|
08B9 |
0F |
|
RRC |
|
08BA |
32 01 0B |
|
STA 0B01 |
Запись десятков в ячейку памяти |
08BD |
78 |
|
MOV A,B |
|
08BE |
32 02 0B |
|
STA 0B02 |
Запись единиц в ячейку памяти |
08C1 |
32 F0 0B |
|
STA 0BF0 |
Вывод на HL0 единиц |
08C4 |
C3 A7 0B |
|
JMP M1 |
Переход к M1 (Ввод пока не нажата “ЗпУв”) |
08C7 |
3A 01 0B |
M2: |
LDA 0B01 |
Сохранение введенного числа в ячейке памяти 0B00 |
08CA |
47 |
|
MOV B,A |
|
08CB |
3A 02 0B |
|
LDA 0B02 |
|
08CE |
80 |
|
ADD B |
|
08CF |
32 00 0B |
|
STA 0B00 |
|
08D2 |
C9 |
|
RET |
Возврат из подпрограммы |
4.6. Подпрограмма SAVE_DATA:
Входные параметры
0B00, 0B01 – текущее число, отображаемое на дисплее.
Выходные параметры:
0B12 – слагаемое.
Перечень подпрограмм вызываемых из данной подпрограммы: нет.
Краткое описание действий подпрограммы:
Подпрограмма сохраняет в памяти число, составляя его из старшего и младшего байта текущего числа.
Код программы:
0890 7E MOV A,M; Формируем слагаемое из байтов
0891 47 MOV B, A
0892 23 INX H
0893 7E MOV A, M
0894 17 RAL
0895 17 RAL
0896 17 RAL
0897 17 RAL
0898 80 ADD B
0899 32 12 0B STA 0B12; Записываем в область слагаемого
089C 3E 02 MVI A, 02; Переходим к ожиданию второго
089E 32 03 0B STA 0B03; слагаемого
08A1 3E 00 MVI A, 00
08A3 77 MOV M, A
08A4 2B DCX H
08A5 77 MOV M, A
08A6 11 00 0B LXI D, 0B00
08A9 C9 RET
