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

D) Передача параметров через таблицу адресов

Доступ к параметрам обеспечивается через таблицу адресов параметров, адрес которой передается в регистре A. Перед началом работы программы производится заполнение списка адресов параметров путем засылки адреса переменной в таблицу.

адрес

код

мнемокод

комментарий

00

30 2a

mvi a,Z

; подготовить

02

18 2d

stor a,TABPAR

;

04

30 2b

mvi a,Y

; таблицу

06

18 2e

stor a,TABPAR1

;

08

30 2c

mvi a,I

; адресов

0a

18 2f

stor a,TABPAR2

; параметров

0c

40

in 0

; ввод z

0d

0a

mov b,a

;

0e

41

in 1

; ввод n

0f

19 2a

stor b,z

; запомнить z

11

31 01

mvi b,1

;

13

19 2c

stor b,I

; i:=1

15

31 00

mvi b,0

; y:=0

17

20

cycl: push a

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

18

30 2d

mvi a,TABPAR

; в rA - адрес таблицы адресов параметров

1a

c0 30

call power

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

1c

59 2b

adm b,Y

; Y:=Y+ZI

1e

10 2c

load a,I

; \

20

60 01

adi a,1

; > I:=I+1;

22

18 2c

stor a,I

; /

24

28

pop a

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

25

e0 17

loop a,cycl

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

27

09

mov a,b

; в rA - Y

28

4a

out 2

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

29

f8

stop

2a

00

Z: .ds 1

2b

00

Y: .ds 1

2c

00

I: .ds 1

2d

00

TABPAR: .ds 1

2e

00

TABPAR1:.ds 1

2f

00

TABPAR2:.ds 1

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

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

; выход: y - zi

; параметры выбираются через таблицу адресов параметров, адрес которой

; передается через регистр A

30

21

power: push b

; сохранить в стеке текущее значение Y

31

31 01

mvi b,1

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

33

20

push a

; сохранить адрес таблицы адресов параметров

34

14 02

load a,2(a)

; в rA - адрес третьего параметра

36

14 00

load a,0(a)

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

38

20

intcyc: push a

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

39

14 82

load a,2(sp)

; в rA - адрес таблицы адресов

3b

14 00

load a,0(a)

; в rA - aдрес первого параметра

3d

8c 00

mum a,0(a)

; p:=p*z

3f

28

pop a

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

40

e0 38

loop a,intcyc

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

42

28

pop a

; восстановить адрес таблицы адресов параметров

43

14 01

load a,1(a)

; загрузить адрес второго параметра

45

1d 00

stor b,0(a)

; запомнить y:=zi

47

29

pop b

; восстановить из стека текущее значение суммы

48

c8

ret

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