Изучение временных диаграмм выполнения команд ввода и вывода информации, страница 4

Задание 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>