Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OMT&МП2.doc
Скачиваний:
10
Добавлен:
13.11.2019
Размер:
2.35 Mб
Скачать

Задание для домашней подготовки

1. Разработать программу 3.1 в машинных кодах.

2. Разработать программу, позволяющую осуществить временную задержку согласно таблицы 3.1. При необходимости увеличить число команд в теле цикла

Таблица 3.1

Варианты заданий

Номер варианта

Задание

Номер

программы

Номер варианта

Задание

Номер

программы

1

2

3

4

5

6

0,005

0,01

1,5

0,007

0,015

1,0

2

3

4

2

3

4

7

8

9

10

11

12

0,004

0,012

0,85

0,003

0,02

1,2

2

3

4

2

3

4

3. Ознакомиться с командами условного перехода. Необходимо, чтобы tзад превышало t max в 2-3 раза.

Задание для выполнения в лаборатории

1. Ввести в ОЗУ программу 3.5.

Программа 3.5

0800

0801

0802

0803

0804

0805

0806

0807

FC

С6

01

FF

C3

02

08

М1

MVI A, FC

ADI 01

RST7

JMP M1

2. Исследовать программу согласно таблице 3.2.

При каждой остановке по команде RSТ7 последовательно извлечь содержимое регистра В и регистра признаков F , используя клавишу "РГ". Затем снова запустить программу с адреса 0805.

Таблица 3.2

Таблица исследования программ

Данные в

аккумуляторе

Данные в регистре признаков

D7

(S)

D6

(Z)

D5

D4

(AC)

D3

D2

(P)

D1

D0

(С)

02

01

....

EF

3. Ввести в ОЗУ программу 3.6.

Программа 3.6

0600

ЗЕ

MVI А, 3

0801

03

0802

06

МI

SUI 01

0803

01

0804

FF

RST7

0805

C3

JMP МI

0806

02

0807

08

4. Исследовать программу согласно таблице 3.2.

5. Ввести в OЗУ программу временной задержки своего варианта и исследовать ее.

Указания по оформлению отчета

1. Привести все программы с указанием адресов и машинных кодов.

2. Привести таблицы исследования.

3. Сделать выводы.

Контрольные вопросы

  1. Каким образом установятся признаки при выполнении команды ADI AC, если содержимое регистра (А) = B5 ?

  2. Каким образом установятся признаки при выполнении команды ANI AC, если содержимое регистра (А) = B5 ?

  3. Каким образом установятся признаки при выполнении команды XRA A, если содержимое регистра (А) = B5 ?

ЛАБОРАТОРНАЯ РАБОТА № 4

ПОДПРОГРАММА И СТЕК

Цель работы: исследование особенностей записи и обращение к подпрограммам; изучение методов использования стека при создании программ.

Теоретическая часть

При разработке и написании программ одна и та же группа команд может встречаться несколько раз в различные местах программы. Очевидно, что если эти группы команд вводить в программу там, где они должны выполняться, то это приведет к увеличению используемого объема памяти, поэтому удобнее записать эту группу команд как подпрограмму и разместить в памяти отдельно с помощью специальных команд.

Подпрограмма представляет собой законченный модуль программы и может вызываться заданное число раз. Использование подпрограмм имеет следующие преимущества:

- проще и быстрее составляются более простые модули;

- разработка программы, разбитой на модули, может вестись параллельно, что сокращает время на подготовку всей программы;

- подпрограммы сокращают объем используемой памяти;

- происходит накопление библиотеки отлаженных алгоритмов.

Организация подпрограммы требует соблюдения некоторых правил. Правильно составленная подпрограмма не должна изменять содержимое ни одного регистра общего назначения МП. Это требование можно выполнить, если при вызове подпрограммы содержимое регистров запомнить, а после выполнения подпрограммы - восстановить. Кроме содержимого регистров необходимо запомнить содержимое регистра флагов. Наиболее удобной для временного хранения является стековая память или стек. В начале подпрограммы целесообразно содержимое регистров запомнить в стеке, а по окончании подпрограммы - извлечь из стека.

Для вызова подпрограммы и возврата из нее к основной программе используются команды CALL и RET. Обращение к подпрограмме можно осуществить также с помощью команд передачи управления JМР и возвращаться с помощью PCHL.

Загрузка данных в стек и извлечение их из стека осуществляется в МП с помощью специальных команд: PUSH и POP. При обращении к стеку необходимо первоначально назначить область стека в ОЗУ, записав в указатель стека SP адрес вершины с помощью команды LXI или команды SPHL.

Все операции со стеком должны быть сбалансированы т.е. каждая подпрограмма должна иметь равное число команд PUSH и POP и оканчиваться командой RET.

Можно рекомендовать следующий порядок организации подпрограммы (табл.4.1).

Таблица 4.1

Метка

Мнемокод

Комментарий

PODPR

PUSH PSM

PUSH В

PUSH D

PUSH H

Загрузка регистра флагов и аккумулятора

Загрузка в стек регистровой пары ВС

Загрузка в стек регистровой пары DE

Загрузка в стек регистровой пары HL

Основной текст подпрограммы

POP Н

POP D

POP В

POP PSW

Извлечение из стека содержимого регистров в обратной последовательности.

RET

Возврат в основную программу

Рассмотрим несколько подпрограмм.

Подпрограмма 1. Изменение знака числа

Программная реализация этой операции следует из представления чисел для МП КР580 в дополнительном коде и осуществляется при помощи двух команд: СМА - инверсия содержимого аккумулятора INR А - инкремент содержимого аккумулятора. Она может быть использована при замене операции вычитания операцией сложения в дополнительном коде.

Для изменения знака двухбайтового числа приходится выполнять инверсию каждого байта, последовательно пересылая его в аккумулятор и используя затем команду INX. Например, для изменения знака числа, находящегося в регистровой паре ВС, необходима следующая последовательность команд: МОV А,В СMА MOV В,А MOV А,С СМА MOV C,A INX В.

Подпрограмма 2. Определение модуля числа

В микроЭВМ числа представляются в дополнительном коде, поэтому при определении модуля нельзя ограничиться только определением знака числа, информация о котором содержится в старшем бите. Если число положительно (S = 0), то его следует оставить в том же виде. Если же число отрицательное, то его необходимо умножить на "-1" и добавить 1.

(Справка: бит знака S регистра признаков F устанавливается в 1, если старший значащий ряд результата операции равен 1).

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

На рис.4.1 приведена структурная схема программы определения модуля числа, находящегося в РОН Е.

Рис. 4.1. Блок - схема программы определения модуля числа

Подпрограмма 3. Поиск максимального числа в массиве чисел.

В прикладных программах встречается задача определения максимального из нескольких чисел. Для выполнения этой операции используется команда сравнения СМР, не изменяющая содержимого аккумулятора.

Допустим, 9 чисел занимают область ОЗУ, с адреса 1 по адрес 2. Требуется поместить максимальное число в РОН В. Адреса ячеек памяти, где хранятся числа, будем указывать в регистровой паре НL. На рис.4.2 приведена структурная схема для определения максимального из массива чисел.

Отметим некоторые особенности подпрограммы. Анализ массива начинается с конечного адреса. Окончание массива характеризуется нулевым значением числа в регистре С.

В ряде случаев нет необходимости в хранении всего массива чисел, а достаточно определить максимальное число по мере поступления каждого нового значения. На рис.4.3 приведена структурная схема такого копирного сравнения чисел. Поступающее новое число находится в аккумуляторе, а максимальное число помещается в РОН В.

Рис. 4.2. Блок - схема программы определения максимального из массива чисел

Рис. 4.3. Блок - схема копирного сравнения чисел

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]