Скачиваний:
49
Добавлен:
21.02.2014
Размер:
73.73 Кб
Скачать

Цель работы: исследование особенностей записи и обращения к подпрограммам; изучение методов использования стека при создании программ.

1. Временные диаграммы выполнения команд CALL addr, RET

2. Рассмотрим программу:

Адрес

Машинный код

Метка

Мнемокод

Комментарий

0880

31 b0 0b

main

lxi sp,0bb0

указатель стека

0883

cd 87 08

call examp_stack

вызов

0886

cf

rst 1

0887

f5

examp_stack

push psw

сохраняем

0888

c5

push b

регистры

0889

d5

push d

088a

e5

push h

088b

e3 05

mvi a,05

088d

47

mov b,a

088e

87

add a

088f

5f

mov e,a

0890

67

mov h,a

0891

e1

pop h

восстанавли-

0892

d1

pop d

ваем регистры

0893

c1

pop b

0894

f1

pop psw

0895

c9

ret

возврат

Обращение, которое производит процессор к подпрограмме, автоматически заносит в стек адрес возврата. И после перехода по CALL addr на вершине стека лежит обратный адрес. Сама подпрограмма сохраняет и восстанавливает еще четыре значения (регистры и флаги). Таким образом в момент максимальной загруженности стека на нем хранится пять значений, самое верхнее из них- это значения аккумулятора и флагов, а самое нижнее - значение адреса возврата.

Если уничтожить команду POP PSW то к концу подпрограммы на вершине стека останется аккумулятор, флаги а на дне - адрес возврата. Тогда по команде RET процессор считает значение аккумулятора и флагов, считая их обратным адресом и перейдет по этому двухбайтовому значению. То есть, неизвестно куда, так как в программе сначала сохраняется значение аккумулятора, которое нечем не было выставлено предварительно (а значит, может иметь любое значение).

3. Полный перечень команд вызова и возврата из подпрограмм для МП БИС КР580ИК80

RC; RPE; RP; RNZ; RM; RPO; RNC; RZ; RET.

RST 7; RST 6; RST 5; RST 4; RST 3; RST 2; RST 1; RST 0.

CZ addr; CNC addr; CC addr; CPE addr; CPO addr; CP addr; CM addr; CNZ addr; CALL addr.

JZ addr; JNZ addr; JMP addr; JNC addr; JC addr; JPO addr; JM addr; JPE addr; JP addr.

Расшифровка условий переходов:

NZ - не нуль

Z - нуль

NC- нет переноса

C - есть перенос

PO - нечетный паритет

PE - четный паритет

P - положительное

M - отрицательное

4. Программы 5 и 10 секундной задержки.

На входе: если загрузить в BC 5000 (1388h) то задержка 5 сек, если 10000 (2710h) то задержка 10 сек.

На выходе: в BC сохраняется число

Адрес

Машинный код

Метка

Мнемокод

Комментарий

08a0

01 88 13

main

lxi b,5000

указатель стека

08a3

cd a7 08

call exam_delay

вызов

08a6

cf

rst 1

08a7

c5

exam_delay

push b

сохраняем

08a8

f5

push psw

регистры

08a9

af

xra a

08aa

d5

push d

08ab

16 67

intrn_loop

mvi d,67h

08ad

15

intrn2

dcr d

08ae

c2 ad 08

jnz intrn2

08b1

0b

dcx b

08b2

b8

cmp b

08b3

c2 ab 08

jnz intrn_loop

восстанавли-

08b6

b9

cmp c

ваем регистры

08b7

c2 ab 08

jnz intrn_loop

08ba

d1

pop d

08bb

f1

pop psw

возврат

08bc

c1

pop b

08bd

c9

ret

5. Перечень команд для работы со стеком для МП БИС КР580ИК80

SPHL; LXI SP,addr

INX SP; DAD SP; DCX SP

POP B; PUSH B; POP D; PUSH D; POP PSW; PUSH PSW; POP H; PUSH H

6. Вывод: наиболее важным при написании подпрограмм является следить за содержанием стека, а именно - за судьбой обратного адреса, который должен быть сохранен для благополучного возврата управления программе; также стек является удобным средством хранения значений регистров вызывающей программы (в случае когда необходимо использовать тот или иной регистр как внутреннюю переменную подпрограммы).

Соседние файлы в папке РАБОТА С ПОДПРОГРАММАМИ И СО СТЕКОМ