Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНЫЙ ПРАКТИКУМ 2012.docx
Скачиваний:
24
Добавлен:
16.08.2019
Размер:
1.27 Mб
Скачать

C) Передача параметров через стек.

В данном случае значения, передаваемые подпрограмме, вызывающей программой последовательно записываются в стек. При этом вызывающая программа резервирует в стеке одну ячейку для возврата результата, записывая в эту ячейку произвольное значение. В подпрограмме доступ к параметрам осуществляется с использованием адресации относительно верхушки стека. После возврата из подпрограммы вызывающая программа извлекает из стека переданные параметры (в данном случае они не изменяются и не нужны) и результат путем выполнения стандартных операций чтения верхушки стека.

адрес

код

мнемокод

комментарий

00

40

in 0

; ввод z

01

0a

mov b,a

;

02

41

in 1

; ввод n

03

19 29

stor b,z

; запомнить z

05

31 01

mvi b,1

;

07

19 2b

stor b,I

; i:=1

09

31 00

mvi b,0

;

0b

19 2a

stor b,Y

; Y:=0

0d

20

cycl: push a

; сохранить счетчик цикла

0e

20

push a

; зарезервировать ячейку стека для z**i

0f

10 2b

load a,I

11

20

push a

; записать в стек текущее значение i

12

10 29

load a,z

14

20

push a

; записать в стек значение z

15

c0 2c

call power

; вызов п/п вычисления степени

17

28

pop a

; извлечь z из стека

18

28

pop a

; извлечь i из стека

19

29

pop b

; извлечь z**i из стека и записать в rB

1a

59 2a

adm b,Y

; Y:=Y+Z**I

1c

19 2a

stor b,Y

; запомнить новое значение Y

1e

60 01

adi a,1

; I:=I+1;

20

18 2b

stor a,I

; запомнить новое значение I

22

28

pop a

; восстановить счетчик цикла из стека

23

e0 0d

loop a,cycl

; замкнуть цикл

25

10 2a

load a,Y

; в rA - Y

27

4a

out 2

; вывести результат в канал 2

28

f8

stop

29

00

Z: .ds 1

2a

00

Y: .ds 1

2b

00

I: .ds 1

; подпрограмма вычисления степени числа

; вход: I - показатель степени; Z - число,возводимое в степень.

; выход: Y - Z**i

; параметры передаются и возвращаются через стек ;

; состояние стека при входе в подпрограмму:

;

(sp) - вершина стека

;

ret address

(sp+1)

;

значение z

(sp+2) параметр Z

;

значение I

(sp+3) параметр I

;

яч. для рез-та

(sp+4) параметр Y

;

счетчик цикла

(sp+5) - дно стека

;

2c

31 01

power: mvi b,1

; p:=1 - результат изначально равен 1

2e

14 83

load a,3(sp)

; в rA - показатель степени- счетчик цикла

30

20

intcyc: push a

; сохранить счетчик цикла

31

8c 83

mum a,3(sp)

; p:=p*z

33

28

pop a

; восстановить из стека счетчик цикла

34

e0 30

loop a,intcyc

; замкнуть цикл

36

1d 84

stor b,4(sp)

; запомнить y:=z**i

38

c8

ret

; возврат в вызывающую программу