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

В) вариант программы с использованием только регистров и стековой памяти

адрес

код

мнемокод

комментарий

00

40

in 0

; ввод C в rA

01

0a

mov b,a

; (rA) -> (rB)

02

41

in 1

; ввод F в rA

03

80

mur a,a

; (rB)*(rA)->(rA,rB) (C*F, результат в паре рег. rA,rB)

04

42

in 2

; ввод E

05

20

push a

; (rA)(sp) : сохранить E в стеке

06

21

push b

; (rB)(sp) : сохранить результат C*F в стеке

07

43

in 3

; ввод B

08

20

push a

; (rA)(sp) : сохранить B в стеке

09

44

in 4

; ввод A

0a

0a

mov b,a

; (rA) -> (rB)

0b

90 01

mui a,1

; распространение знака

0d

9c 81

dvm a,1(sp)

; (rA,rB)/((sp)+1), умножение операнда rA на ;верхушку стека, частное в rB,остаток в rA : (A/B)

0f

28

pop a

; (sp)(rA) : B вытолкнуть из стека в rA

10

28

pop a

; (sp)(rA) : C*F вытолкнуть из стека в rA (операнд в регистре rA перезаписывается)

11

6a

sbr b,a

; (rB)-(rA) -> (rB): (A/B - C*F)

12

28

pop a

; (sp)(rA) : вытолкнуть из стека E в rA

13

80

mur a,a

; (rB)*(rA) - >(rA,rB) (A/B - C*F)*E

14

09

mov a,b

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

15

4d

out 5

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

16

f8

stop

; oстанов

В результате получили полностью перемещаемую программу, в которой для хранения исходных данных и промежуточных результатов используются только регистры и ячейки стека. Т.е. под данные не задействована ни одна ячейка памяти. Это полностью перемещаемый вариант программы. Проверим ее с теми же исходными данными (А=8, В=2, С=3, F=4, результат Y=4 выведен в порт №5). Очередность ввода данных определена алгоритмом вычисления C-F-E-B-A.

Тема: Команды сравнения и переходов

Для выполнения данного лабораторного практикума необходимо дополнить свои знания изучением следующих команд.

Сравнение регистров: CMR R1,R2. Признак результата устанавливается в соответствии с операцией (R1)-(R2). Содержимое регистров не изменяется.

Сравнение непосредственное: CMI R,I. Признак результата устанавливается в соответствии с операцией (R1)-I. Содержимое регистров не изменяется.

Группа команд переходов: В зависимости от трехразрядного кода условия возможны следующие переходы:

безусловный переход JMP;

переход по минусу JN;

переход по нулю JZ;

переход по плюсу JP;

переход по переполнению JV;

переход по не минусу JNN;

переход по не нулю JNZ;

переход по не плюсу JNP;

Проверяется состояние регистра признаков. Если бит, соответствующий условию перехода, установлен, в программный счетчик заносится адрес перехода.

Переход к подпрограмме: CALL А или CALL D(B). Адрес следующей за CALL команды заносится в вершину стека, в программный счетчик заносится адрес подпрограммы.

Возврат из подпрограммы: RET. Из вершины стека извлекается адрес возврата и записывается в программный счетчик

Организация цикла: LOOP R,A или LOOP R,D(B). Из содержимого регистра R вычитается 1. Если результат операции не равен нулю, осуществляется переход по адресу А или (B)+D. Если результат операции равен нулю, выполняется команда, следующая за командой организации цикла.

Группа команд переходов может быть условно поделена на несколько подгрупп :

•подгруппа команд безусловных переходов;

•подгруппа команд условных переходов;

•подгруппа команд организации циклов;

•подгруппа команд организации подпрограмм;

•подгруппа команд работы с прерываниями

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

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

Рассмотрим применение команд сравнений и переходов на примере вычисления выражения:

0 ,при X < 0

Y:= X ,при 0 < X< 1

X4 ,при X > 1

адрес

код

мнемокод

комментарий

00

40

in 0

;ввод X

01

b0 00

cmi a,0

;сравнить (rA) c 0 (установить регистр флагов)

03

b9 0f

jn lab1

;переход на метку lab1:, если установлен признак N ;(X<0), если нет, то выполнять следующую команду

05

b0 01

cmi a,1

;сравнить (rA) c 1 (установить рег.флагов по (rA)-1)

07

bf 11

jnp lab2

;переход на метку lab2:, если установлен признак P, ;т.е. X<=1, если нет, то выполнять следующую ;команду

09

38

xchg

; (rA) (rB) обмен содержимого rA и rB

0a

81

mur a,b

; (rB)*(rB) -> (rA,rB) : X*X (умножение содержимо-;го регистра rA на операнд регистра rB соответствует ;возведению в квадрат операнда регистра rB так как ;при прозведении целая часть операнда rA находится ;во втором слове, т.е. в rB)

0b

81

mur a,b

; (rB)*(rB) -> (rA,rB) : (X*X)*(X*X)

0c

38

xchg

;(rA)(rB) : теперь результат в (rA)

0d

b8 11

jmp lab2

;безусловный переход на вывод результата

0f

30 00

lab1: mvi a,0

;X=0

11

49

lab2: out 1

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

12

f8

stop

В данной программе использованы команды сравнения CMI - сравнить содержимое регистра и непосредственный операнд, а также команды переходов: JN - переход по минусу; JNP - переход по неположительному результату; JMP - безусловный переход.

Проверка для Х=2, Y=10h или 16d.

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