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

Первый вариант:

Вычисление выражения

по структурной схеме цикла с предусловием (while-цикл)

адрес

код

мнемокод

комментарий

00

31 01

mvi b,1

;загрузим 1 в регистр rB

02

19 26

stor b,F

; f:=1 (f- текущее значение факториала )

04

19 27

stor b,Y

; Y:=1

06

40

in 0

; ввод N в rA

07

b0 00

cmi a,0

; сравнить (rA) с 0 (n=0 ?)

09

ba 22

jz exit

; перейти по символическому адресу exit при (rA)=0

0b

38

xchg

; (rA)(rB) : в rA - 1(i:=1); в rB - N

0c

19 28

stor b,N

; запомнить N по символическому адресу N

0e

11 28

cycl: load b,N

; загрузить в N

10

a9

cmr a,b

; сравнить rA и rB (i<=n?)

11

bb 22

jp exit

; переход по признаку P (i>n)

13

11 26

load b,F

; в rB - (i-1)!

15

20

push a

; (rA) (sp) (coхранить i в стеке )

16

80

mur a,a

; (rB)*(rA)->(rA,rB) i!:=i*(i-1)!

17

19 26

stor b,F

; запомнить i! по символическому адресу F

19

59 27

adm b,Y

; f+Y

1b

19 27

stor b,Y

; Y:=Y+F

1d

28

pop a

; (sp)(rA) восстановить в rA I

1e

60 01

adi a,1

; (rA)+1 -> (rA) : i:=i+1

20

b8 0e

jmp cycl

; переход на проверку условия окончания цикла

22

10 27

exit: load a,Y

; (rA)<- результат вычисления выражения

24

49

out 1

; вывод результата в порт 1

25

f8

stop

; стоп

26

00

F: .ds 1

; ячейка под текущее значение факториала

27

00

Y: .ds 1

; ячейка под результат

28

00

N: .ds 1

; ячейка для хранения N

Для N=2, Y=4.

Второй вариант:

Вычисление выражения

по структурной схеме цикла с пoстусловием (repeat...until - цикл)

адрес

код

мнемокод

комментарий

00

31 01

mvi b,1

02

19 24

stor b,F

; f:=1 (f- текущее значение факториала )

04

19 25

stor b,Y

; Y:=1

06

40

in 0

; ввод N в rA

07

b0 00

cmi a,0

; сравнить (rA) с 0 (n=0 ?)

09

ba 20

jz exit

; перейти по символическому адресу exit при (rA)=0

0b

38

xchg

; (rA)(rB) : в rA - 1(i:=1); в rB - N

0c

19 26

stor b,N

; запомнить N по символическому адресу N

0e

11 24

cycl: load b,F

; в rB - (i-1)!

10

20

push a

; (rA)(sp) (coхранить i в стеке )

11

80

mur a,a

; (rB)*(rA)->(rA,rB) i!:=i*(i-1)!

12

19 24

stor b,F

; запомнить i! по символическому адресу F

14

59 25

adm b,Y

; f+Y

16

19 25

stor b,Y

; Y:=Y+F

18

28

pop a

; (sp)(rA) восстановить в rA i

19

60 01

adi a,1

; (rA)+1 -> (rA) : i:=i+1

1b

11 26

load b,N

; (rB) <- N

1d

a9

cmr a,b

; сравнить (rA) c (rB) :(i>n?)

1e

bf 0e

jnp cycl

; переход на начало цикла,если признак N (i<=n)

20

10 25

exit: load a,Y

; (rA)<- результат вычисления выражения

22

49

out 1

; вывод результата в порт 1

23

f8

stop

; стоп

24

00

F: .ds 1

; ячейка под текущее значение факториала

25

00

Y: .ds 1

; ячейка под результат

26

00

N: .ds 1

; ячейка для хранения N

Пример для N=3, Y=0ah.