Задание 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).
Ссылка на скачивание - внизу страницы.