Задание 4: Составить программу выдачи на любые два разряда дисплея H-кодов нажимаемых клавиш.
Ячейки памяти 0800-080f зарезервированы для семисегментных кодов чисел 0-F.
Блок-схема
Блок-схема процедуры сравнения
Блок-схема подпрограммы задержки
Блок-схема процедуры вывода символа
Листинг программы
0810 |
Lxi H |
21 |
HL←0800 |
0811 |
00 |
00 |
|
0812 |
08 |
08 |
|
0813 |
Mvi B |
06 |
B←04 |
0814 |
04 |
04 |
|
0815 |
Mov A,B |
78 |
А←B |
0816 |
Out |
d3 |
Вывести A |
0817 |
F8 |
f8 |
на канал А порта |
0818 |
In |
db |
Считать |
0819 |
FA |
fa |
Канал С порта |
081a |
CpiI |
fe |
Сравнить с 74 |
081b |
74 |
74 |
|
081c |
Jz |
ca |
Если равно, перейти по адресу |
081d |
22 |
22 |
|
081e |
08 |
08 |
|
081f |
Jmp |
c3 |
Иначе перейти по адресу |
0820 |
35 |
35 |
|
0821 |
08 |
08 |
|
0822 |
Call |
cd |
Вызвать процедуру вывода символа по адресу |
0823 |
4A |
4a |
|
0824 |
08 |
08 |
|
0825 |
Mov A,B |
78 |
А←B |
0826 |
Cpi |
fe |
Сравнить с 20 |
0827 |
20 |
20 |
|
0828 |
Jnz |
c2 |
Если не равно, перейти |
0829 |
30 |
30 |
|
082a |
08 |
08 |
|
082b |
Mvi B |
06 |
Иначе В←04 |
082c |
04 |
04 |
|
082d |
Jmp |
c3 |
Перейти |
082e |
15 |
15 |
|
082f |
08 |
08 |
|
0830 |
Rlc |
07 |
Циклический сдвиг А влево |
0831 |
Mov B,A |
47 |
В←А |
0832 |
Jmp |
c3 |
Перейти |
0833 |
15 |
15 |
|
0834 |
08 |
08 |
|
0835 |
Call |
cd |
Вызвать процедуру сравнения по адресу |
0836 |
79 |
79 |
|
0837 |
08 |
08 |
|
0838 |
Mov A,B |
78 |
А←В |
0839 |
Cpi |
fe |
Сравнить с 04 |
083a |
04 |
04 |
|
083b |
Jz |
ca |
Если равно, перейти |
083c |
43 |
43 |
|
083d |
08 |
08 |
|
083e |
Rrc |
0f |
Иначе циклический сдвиг А вправо |
083f |
Inr L |
2c |
Инкрементировать L |
0840 |
Jmp |
c3 |
Перейти |
0841 |
39 |
39 |
|
0842 |
08 |
08 |
|
0843 |
Mov D,M |
56 |
В←M(hl) |
0844 |
Call |
cd |
Вызвать процедуру вывода символа по адресу |
0845 |
4A |
4a |
|
0846 |
08 |
08 |
|
0847 |
Jmp |
c3 |
Перейти по адресу |
0848 |
15 |
15 |
|
0849 |
08 |
08 |
|
Процедура вывода символа |
|||
084a |
Mvi A |
3e |
А←01 |
084b |
01 |
01 |
|
084c |
Out |
d3 |
Вывести на канал А порта |
084d |
F8 |
f8 |
|
084e |
Mov A,D |
7a |
А←D |
084f |
Ani |
e6 |
A “and” F0 |
0850 |
F0 |
f0 |
|
0851 |
Rrc |
0f |
Циклический сдвиг вправо |
0852 |
Rrc |
0f |
Циклический сдвиг вправо |
0853 |
Rrc |
0f |
Циклический сдвиг вправо |
0854 |
Rrc |
0f |
Циклический сдвиг вправо |
0855 |
Mov L,A |
6f |
L←A |
0856 |
Mov A,M |
7e |
А←M(hl) |
0857 |
Out |
d3 |
Вывести на канал В порта |
0858 |
F9 |
f9 |
|
0859 |
Mvi A |
3e |
А←02 |
085a |
02 |
02 |
|
085b |
Out |
d3 |
Вывести на канал А порта |
085c |
F8 |
f8 |
|
085d |
Mov A,D |
7a |
А←D |
085e |
Ani |
e6 |
A “and” 0F |
085f |
0F |
0f |
|
0860 |
Mov L,A |
6f |
L←A |
0861 |
Mov A,M |
7e |
А←M(hl) |
0862 |
Out |
d3 |
Вывести на канал В порта |
0863 |
F9 |
f9 |
|
0864 |
Call |
cd |
Вызвать процедуру задержки по адресу |
0865 |
68 |
68 |
|
0866 |
08 |
08 |
|
0867 |
Ret |
c9 |
Вернуться из процедуры |
Процедура задержки |
|||
0868 |
Mvi D |
16 |
D←ff |
0869 |
ff |
FF |
|
086a |
Mvi E |
1E |
E←04 |
086b |
04 |
04 |
|
086c |
Dcr E |
1D |
E=E-1 |
086d |
Jnz |
C2 |
Перейти к 086c, если флаг z=0 |
086e |
6c |
6C |
|
086f |
08 |
08 |
|
0870 |
Dcr D |
15 |
D=D-1 |
0871 |
Jnz |
C2 |
Перейти к 086a, если флаг z=0 |
0872 |
6a |
6A |
|
0873 |
08 |
08 |
|
0874 |
Ret |
C9 |
Вернуться из подпрограммы |
0875 |
Nop |
00 |
|
0876 |
Nop |
00 |
|
0877 |
Nop |
00 |
|
0878 |
Nop |
00 |
|
Процедура сравнения |
|||
0879 |
Cpi |
fe |
Сравнить А с 64 |
087a |
64 |
64 |
|
087b |
Jz |
ca |
Если равно, перейти по адресу |
087c |
8B |
8b |
|
087d |
08 |
08 |
|
087e |
Cpi |
fe |
Иначе сравнить А с 34 |
087f |
34 |
34 |
|
0880 |
Jz |
ca |
Если равно, перейти по адресу |
0881 |
8E |
8e |
|
0882 |
08 |
08 |
|
0883 |
Cpi |
fe |
Иначе сравнить А с 54 |
0884 |
54 |
54 |
|
0885 |
Jz |
ca |
Если равно, перейти по адресу |
0886 |
91 |
91 |
|
0887 |
08 |
08 |
|
0888 |
Mvi L |
2e |
Иначе L←0C |
0889 |
0C |
0c |
|
088a |
Ret |
c9 |
Конец подпрограммы |
088b |
Mvi L |
2e |
L←00 |
088c |
00 |
00 |
|
088d |
Ret |
c9 |
Конец подпрограммы |
088e |
Mvi L |
2e |
L←04 |
088f |
04 |
04 |
|
0890 |
Ret |
c9 |
Конец подпрограммы |
0891 |
Mvi L |
2e |
L←08 |
0892 |
08 |
08 |
|
0893 |
Ret |
c9 |
Конец подпрограммы |
Временные диаграммы:
Команда In <port>
Команда Out <port>
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.