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

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

Конец подпрограммы