Задание 3: Модифицировать предыдущую программу таким образом, чтобы на 4 разряда дисплея последовательно выдавались результаты опроса клавиш выбранной линейки клавиатуры в порядке нажатия клавиш.
Ячейки памяти 0800-080F зарезервированы для семисегментных кодов чисел 0-F.
Ячейки памяти 0810-0813 используются в программе для временного хранения данных.
Блок-схема


Блок-схема процедуры сравнения

Блок-схема процедуры вывода символа

Блок-схема подпрограммы задержки

Листинг программы
|
0814 |
Lxi H |
21 |
HL←0800 |
|
0815 |
00 |
00 |
|
|
0816 |
08 |
08 |
|
|
0817 |
Mvi B |
06 |
B←04 |
|
0818 |
04 |
04 |
|
|
0819 |
Mov A,B |
78 |
А←B |
|
081a |
Out |
d3 |
Вывести A |
|
081b |
F8 |
f8 |
на канал А порта |
|
081c |
In |
db |
Считать |
|
081d |
FA |
fa |
Канал С порта |
|
081e |
Cpi |
fe |
Сравнить с 74 |
|
081f |
74 |
74 |
|
|
0820 |
Jz |
ca |
Если равно, перейти по адресу |
|
0821 |
26 |
26 |
|
|
0822 |
08 |
08 |
|
|
0823 |
Jmp |
c3 |
Иначе перейти по адресу |
|
0824 |
39 |
39 |
|
|
0825 |
08 |
08 |
|
|
0826 |
Call |
cd |
Вызвать процедуру вывода символа по адресу |
|
0827 |
6E |
6e |
|
|
0828 |
08 |
08 |
|
|
0829 |
Mov A,B |
78 |
А←B |
|
082a |
Cpi |
fe |
Сравнить с 20 |
|
082b |
20 |
20 |
|
|
082c |
Jnz |
c2 |
Если не равно, перейти |
|
082d |
34 |
34 |
|
|
082e |
08 |
08 |
|
|
082f |
Mvi B |
06 |
Иначе В←04 |
|
0830 |
04 |
04 |
|
|
0831 |
Jmp |
c3 |
Перейти |
|
0832 |
19 |
19 |
|
|
0833 |
08 |
08 |
|
|
0834 |
Rlc |
07 |
Циклический сдвиг А влево |
|
0835 |
Mov B,A |
47 |
В←А |
|
0836 |
Jmp |
c3 |
Перейти |
|
0837 |
19 |
19 |
|
|
0838 |
08 |
08 |
|
|
0839 |
Call |
cd |
Вызвать процедуру сравнения по адресу |
|
083a |
97 |
97 |
|
|
083b |
08 |
08 |
|
|
083c |
Mov A,B |
78 |
А←В |
|
083d |
Cpi |
fe |
Сравнить с 04 |
|
083e |
04 |
04 |
|
|
083f |
Jz |
ca |
Если равно, перейти |
|
0840 |
47 |
47 |
|
|
0841 |
08 |
08 |
|
|
0842 |
Rrc |
0f |
Иначе циклический сдвиг А вправо |
|
0843 |
Inr L |
2c |
Инкрементировать L |
|
0844 |
Jmp |
c3 |
Перейти |
|
0845 |
3D |
3d |
|
|
0846 |
08 |
08 |
|
|
0847 |
Mov D,M |
56 |
В←M(hl) |
|
0848 |
Mov A,C |
79 |
А←C |
|
0849 |
Cpi |
fe |
Сравнить с 04 |
|
084a |
04 |
04 |
|
|
084b |
Jz |
ca |
Если равно, перейти |
|
084c |
57 |
57 |
|
|
084d |
08 |
08 |
|
|
084e |
Mvi L |
2e |
Иначе L←10 |
|
084f |
10 |
10 |
|
|
0850 |
Mov A,L |
7d |
А←L |
|
0851 |
Add C |
81 |
A:=A+C |
|
0852 |
Mov M,D |
72 |
M(hl)←D |
|
0853 |
Inr C |
0c |
Инкрементировать С |
|
0854 |
Jmp |
c3 |
Перейти |
|
0855 |
68 |
68 |
|
|
0856 |
08 |
08 |
|
|
0857 |
Mvi L |
2e |
L←11 |
|
0858 |
11 |
11 |
|
|
0859 |
Mov A,M |
7e |
A←M(hl) |
|
085a |
Dcr L |
2d |
Декрементировать L |
|
085b |
Mov M,A |
77 |
M(hl)←A |
|
085c |
Inr L |
2c |
Инкрементировать L |
|
085d |
Inr L |
2c |
Инкрементировать L |
|
085e |
Mov A,M |
7e |
A←M(hl) |
|
085f |
Dcr L |
2d |
Декрементировать L |
|
0860 |
Mov M,A |
77 |
M(hl)←A |
|
0861 |
Inr L |
2c |
Инкрементировать L |
|
0862 |
Inr L |
2c |
Инкрементировать L |
|
0863 |
Mov A,M |
7e |
A←M(hl) |
|
0864 |
Dcr L |
2d |
Декрементировать L |
|
0865 |
Mov M,A |
77 |
M(hl)←A |
|
0866 |
Inr L |
2c |
Инкрементировать L |
|
0867 |
Mov M,D |
72 |
M(hl)←D |
|
0868 |
Call |
cd |
Вызвать процедуру вывода символа по адресу |
|
0869 |
6E |
6e |
|
|
086a |
08 |
08 |
|
|
086b |
Jmp |
c3 |
Перейти по адресу |
|
086c |
19 |
19 |
|
|
086d |
08 |
08 |
|
|
Процедура вывода символа |
|||
|
086e |
Mvi E |
1e |
E←04 |
|
086f |
04 |
04 |
|
|
0870 |
Mvi D |
16 |
D←01 |
|
0871 |
01 |
01 |
|
|
0872 |
Mvi L |
2e |
L←10 |
|
0873 |
10 |
10 |
|
|
0874 |
Mov A,D |
7a |
А←D |
|
0875 |
Out |
d3 |
Вывести на канал А порта |
|
0876 |
F8 |
f8 |
|
|
0877 |
Mov A,M |
7e |
А←M(hl) |
|
0878 |
Out |
d3 |
Вывести на канал В порта |
|
0879 |
F9 |
f9 |
|
|
087a |
Call |
cd |
Вызвать процедуру задержки по адресу |
|
087b |
86 |
86 |
|
|
087c |
08 |
08 |
|
|
087d |
Inr L |
2c |
Инкрементировать L |
|
087e |
Mov A,D |
7a |
А←D |
|
087f |
Rlc |
07 |
Циклический сдвиг влево |
|
0880 |
Mov D,A |
57 |
D←А |
|
0881 |
Dcr E |
1d |
Декрементировать Е |
|
0882 |
Rz |
c8 |
Если E=0, вернуться из процедуры |
|
0883 |
Jmp |
c3 |
Иначе перейти по адресу |
|
0884 |
74 |
74 |
|
|
0885 |
08 |
08 |
|
|
Процедура задержки |
|||
|
0886 |
Mvi D |
16 |
D←ff |
|
0887 |
ff |
FF |
|
|
0888 |
Mvi E |
1E |
E←04 |
|
0889 |
04 |
04 |
|
|
088a |
Dcr E |
1D |
E=E-1 |
|
088b |
Jnz |
C2 |
Перейти к 088a, если флаг z=0 |
|
088c |
8a |
8A |
|
|
088d |
08 |
08 |
|
|
088e |
Dcr D |
15 |
D=D-1 |
|
088f |
Jnz |
C2 |
Перейти к 0888, если флаг z=0 |
|
0890 |
88 |
88 |
|
|
0891 |
08 |
08 |
|
|
0892 |
Ret |
C9 |
Вернуться из подпрограммы |
|
0893 |
Nop |
00 |
|
|
0894 |
Nop |
00 |
|
|
0895 |
Nop |
00 |
|
|
0896 |
Nop |
00 |
|
|
Процедура сравнения |
|||
|
0897 |
Cpi |
fe |
Сравнить А с 64 |
|
0898 |
64 |
64 |
|
|
0899 |
Jz |
ca |
Если равно, перейти по адресу |
|
089a |
78 |
a9 |
|
|
089b |
08 |
08 |
|
|
089c |
Cpi |
fe |
Иначе сравнить А с 34 |
|
089d |
34 |
34 |
|
|
089e |
Jz |
ca |
Если равно, перейти по адресу |
|
089f |
7B |
ac |
|
|
08а0 |
08 |
08 |
|
|
08а1 |
Cpi |
fe |
Иначе сравнить А с 54 |
|
08а2 |
54 |
54 |
|
|
08а3 |
Jz |
ca |
Если равно, перейти по адресу |
|
08а4 |
7E |
af |
|
|
08а5 |
08 |
08 |
|
|
08а6 |
Mvi L |
2e |
Иначе L←0C |
|
08а7 |
0C |
0c |
|
|
08а8 |
Ret |
c9 |
Конец подпрограммы |
|
08а9 |
Mvi L |
2e |
L←00 |
|
08аa |
00 |
00 |
|
|
08аb |
Ret |
c9 |
Конец подпрограммы |
|
08аc |
Mvi L |
2e |
L←04 |
|
08аd |
04 |
04 |
|
|
08аe |
Ret |
c9 |
Конец подпрограммы |
|
08аf |
Mvi L |
2e |
L←08 |
|
08b0 |
08 |
08 |
|
|
08b1 |
Ret |
c9 |
Конец подпрограммы |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.