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

A) Абсолютная адресация

адрес

код

мнемокод

комментарий

; ##### Y:=(A/B - C*F)*E #####

00

40

in 0

; ввод, данные с клавиатуры поступают в порт 0 и

;запиcываются в региср rA

01

18 24

stor a,A

; запомнить содержимое rA по символич-му адресу A

03

41

in 1

; ввод В, данные с клавиатуры поступают в порт 1 и

;запиcываются в региср rA (предыдущее содержание ;регистра rA перезаписывается на новое).

04

18 25

stor a,B

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

06

42

in 2

; ввод С в порт 2

07

18 26

stor a,C

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

09

43

in 3

; ввод F в порт 3

0a

18 27

stor a,F

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

0c

44

in 4

; ввод E в порт 4

0d

18 28

stor a,E

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

0f

11 24

load b,A

; загрузить операнд A в rB

11

90 01

mui A,1

; расширить знак (преобразовать слово в двойное слово)

13

98 25

dvm a,B

; (rA,rB)/B-> частное в rB, остаток в rA

15

19 29

stor b,tmp

; запомнить результат деления по адресу tmp (Y:=A/B)

17

11 26

load b,C

; загрузить операнд C в rB

19

88 27

mum a,F

;умножить (rB)*(F)-> (rA,rB), результат помещается в ;rB <-(С*F)

1b

10 29

load a,tmp

; в ra загрузить операнд tmp (Y:=A/B)

1d

69

sbr a,b

; вычесть из (rA) (rB) (Y= A/B - С*F)

1e

0a

mov b,a

; скопировать результат в rB

1f

88 28

mum a,E

; (rB)*(E) -> (rA,rB) умножение производится на ;операнд регистра ra так как операнд Y помещается в ;два регистра rA и rB, а при умножении мы всегда ;должны указывать первым регистр rA

21

09

mov a,b

; скопировать результат из rB в rA так как вывод в порт ;можно сделать только из регистра rA

22

4d

out 5

; вывести результат в 5 порт

23

f8

stop

; стоп

24

00

A: .ds 1

; ячейка памяти для A (резервирование ячеек памяти ;обязательно для размещения аргументов)

25

00

B: .ds 1

; --//-- B

26

00

C: .ds 1

; --//-- C

27

00

F: .ds 1

; --//-- F

28

00

E: .ds 1

; --//-- E

29

00

tmp: .ds 1

; --//-- tmp

При написании программы необходимо обязательно соблюдать синтаксис, иначе программа не будет работать! Коды и адреса автоматически указываются при компилировании программы, для этого необходимо программу загрузить в ASSEMBLP. При успешной компиляции формируется файл с расширением .mod. Если такой файл не сформирован, необходимо открыть файл с расширением .LST и проанализировать ошибки. Для проверки работоспособности программы ее нужно загрузить в модель ALTMAINF.

(В примере дано А=8, В=2, С=3, F=4, Y=4 результат выведен в порт №5) В программе в 12 командах используется абсолютная адресация к операндам в памяти. Программа является неперемещаемой, т.е. при переносе программы в другие адреса памяти для восстановления ее работоспособности необходимо скорректировать коды 12 команд. Для программы, предназначенной для решения какой-либо реальной задачи, количество таких команд, естественно, будет значительно выше, со всеми вытекающими последствиями. Попробуем сократить число команд с абсолютными адресами и построить перемещаемую программу для вычисления того же выражения, используя относительную адресацию. Поскольку в модели ЭВМ-2 нет команд загрузки регистров содержимым счетчика адреса команд, то, по крайней мере одна команда (первая) будет содержать абсолютный адрес - адрес начала программы, относительно которого будут адресоваться все другие команды программы.