Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LAB3

.pdf
Скачиваний:
5
Добавлен:
06.03.2016
Размер:
204.04 Кб
Скачать

ГОСУДАРСТВЕННЫЙ КОМИТЕТ РОССИЙСКОЙ ФЕДЕРАЦИИ ПО ВЫСШЕМУ ОБРАЗОВАНИЮ

УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

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

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

клабораторным работам по курсу

"Микропроцессоры и ЭВМ в приборостроении "

Уфа 1998

2

Составители: А.П.Торгашев М.П.Иванов

УДК 621.3.019

Подпрограммы и стек: Методические указания к лабораторным работам по курсу "Микропроцессоры и ЭВМ в приборостроении." /Уфимск. гос. авиац. техн. ун-т; Сост. А.П.Торгашев, М.П.Иванов. Уфа, 1998, 13с.

Методические указания включают в себя краткие теоретические сведения по командам вызова подпрограмм и возврата из них, как безусловных, так и условных, по принципам организации и назначению стека, по командам работы со стеком, примеры программ и подпрограмм для МП КР580ВМ80А, задание к лабораторной работе, методику выполнения работы по курсу "Микропроцессоры и ЭВМ в приборостроении". Лабораторная работа посвящена изучению организации стека, изучению способов создания подпрограмм на ассемблере МП КР580ВМ80А, а также изучению способов формирования звуковых сигналов в микропроцессорной системе.

Предназначена для студентов направления 551500 "Приборостроение" и может быть полезна студентам других специальностей.

 

3

 

 

СОДЕРЖАНИЕ

 

1

Цель работы

4

2

Краткие теоретические сведения

4

3

Задание к лабораторной работе

11

4

Порядок выполнения задания

12

5

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

12

6

Требования по оформлению отчета

13

7

Список литературы

13

4

ЛАБОРАТОРНАЯ РАБОТА МПТ-3

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

1 Цель работы

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

2 Краткие теоретические сведения

Память микро-ЭВМ, построенной на основе МПК серии КР580, может иметь не более 65536 однобайтных ячеек. Учитывая ограниченные возможности памяти при разработке программ, нужно стараться сделать их как можно короче. С этой целью часть программы, которая неоднократно повторяется, или программа, которая часто используется, могут быть оформлены в виде подпрограмм - последовательности команд, выполнение которых может быть вызвано из любого места программы любое количество раз. Процесс передачи управления к подпрограмме называется ее вызовом. Данные и адреса, требуемые для работы подпрограммы, называются входными параметрами. Результаты работы подпрограммы, передаваемые по окончании ее работы в основную программу, называются выходными параметрами.

Для вызова подпрограммы и возврата из них используются команды CALL и RET, а также команды RST Vec, где Vec - вектор перехода (0..7).

Команда CALL загружает в программный счетчик МП БИС содержимое байтов , записанных по последующим двум адресам памяти после адреса, по которому записан код программы CALL (CD). Содержимое байта записывается в младший байт РСL программного счетчика, а третий байт команды - в старший байт РСН программного счетчика, при этом МП БИС автоматически сохраняет в стеке адрес основной программы, по которому необходимо произвести возврат после выполнения подпрограммы.

5

Стек - специально организованная область ОЗУ, задействованная в микро-ЭВМ для временного сохранения данных или адресов. Число, записанное в стек последним, извлекается из него первым. Адрес начала стека назначается программистом и задается начальной загрузкой регистра-указателя стека SP (Stack Pointer) командой SPHL (переслать содержимое регистра HL в регистр SP) или командой LXI SP . В используемых в лабораторном практикуме стендах адрес начала стека задается при включении стенда автоматически и равен 0BB0h. Стек работает на автоуменьшение, что означает, что по мере заполнения стека адрес в указателе стека смещается от больших адресов к меньшим, при этом указатель стека SР всегда содержит адрес последней ячейки стека, в которой записано число.

Команда RET (C9) помещает в программный счетчик последнее записанное на данный момент в стеке число. После этого выполнение программы будет осуществляться с этого адреса. Любая подпрограмма должна кончаться командой RET.

Автоматическое сохранение и восстановление адреса основной программы при выполнении подпрограмм позволяет сделать подпрограммы вложенными, т.е. осуществить вызов одной подпрограммы из другой. Уровень вложенности для данной микро-ЭВМ определяется лишь размером стека.

Существуют также команды условного вызова подпрограммы (CC, CNC, CZ, CNZ, CP, CM, CPE, CPO) и условного возврата из них (RC, RNC, RZ, RNZ, RP, RM, RPE, RPO). Они позволяют вызвать подпрограмму и возвратиться из нее по определенному состоянию заданных разрядов регистра признаков (аналогично командам условных переходов). Все команды условного вызова подпрограммы - трехбайтные, во втором и третьем байтах сообщается начальный адрес подпрограммы. Такие команды также используют стек и внутренний регистр МП БИС SР (Stack Рointer) для адресации к стеку.

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

6

можно обмениваться информацией с помощью команд РUSН (записать в стек содержание обозначенного регистра МП БИС) и РОР (записать данные из стека в обозначенный регистр МП БИС). Эти команды являются однобайтными, и в них содержится указание пары регистров МП БИС.

При записи в стек содержимого пары регистров или программного счетчика по адресу SР - 1 записывается содержимое старшего регистра из указанной пары или старший байт РСН программного счетчика, а по адресу SР - 2 в стек записывается содержимое младшего регистра из указанной пары младшего байта РСL программного счетчика.

При записи из стека данных в пару регистров или программный счетчик в младший регистр пары или РСL записывается число из ЯП с адресом, указанным в указателе стека SР, а в старший регистр пары или РСН - число, записанное по адресу SР + 1. В результате выполнения команды содержимое указателя стека SР увеличивается на 2. Данные в памяти не изменяются, а лишь происходит их чтение и увеличение содержимого SР.

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

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

Вызов подпрограммы командами типа CALL фактически реализует механизм программного прерывания (как безусловного, так и условного) с переходом на произвольный адрес, задаваемый в формате команды (механизм прямой адресации). В системе команд МП КР580ВМ80, однако,

7

имеются еще восемь команд, обеспечивающих вызов подпрограмм (RST 0 .. RST 7). Отличие этих команд от команд класса CALL в том, что переход при выполнении этих команд происходит по фиксированному адресу, неявно заданному в коде команды, то есть команды являются однобайтными. Команда RST Vec обеспечивает загрузку в счетчик команд адреса перехода, где vvv - двоичный код вектора перехода Vec. Так, при выполнении команды RST 2 происходит переход по адресу 0018h, при RST 7 - по адресу 0038h, при RST 0 - переход по адресу 0000h, то есть выполняется программный сброс системы. Так как на каждый вектор перехода в формируемом адресе отводится по три двоичных разряда, можно считать, что в адресном пространстве системы зарезервирована область таблицы векторов программных прерываний с выделением под обслуживание каждого вектора восьми адресов (байт). Очевидно, что в этом адресном пространстве могут располагаться и команды безусловных и условных переходов, что позволяет перейти через данную таблицу векторов в любую точку адресного пространства. В учебном стенде УМПК-80 команды типа RST используются для остановки программы пользователя (RST 1, RST 2) и индикации адреса останова.

Подпрограмма 1

Адрес

Машинный

Метка

Мнемокод

Комментарий

 

код

 

 

 

0900

C5

DLY

PUSH B

Сохранить в стеке со

 

 

 

 

держимое регистра ВС

0901

48

 

MOV С,B

записать число из

 

 

 

 

базового регистра B

 

 

 

 

в регистр-счетчик C

0902

00

LOOP

NOP

нет операции

0903

0D

 

DCR C

уменьшить счетчик в

 

 

 

 

регистре C на 1

0904

С2 02 09

 

JNZ LOOP

если число, записанное в

 

 

 

 

регистре C, равно нулю

0907

C1

 

POP B

Восстановить из стека

 

 

 

 

содержимое регистра ВС

0908

C9

 

RET

Возврат из подпрограммы

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

8

фрагменты программ, например подпрограмма выдачи звукового сигнала, подпрограмма обслуживания клавиатуры и дисплея, подпрограммы временных задержек, упомянутые уже подпрограммы останова программы пользователя и так далее. Так, на рис.1 представлен алгоритм простой подпрограммы временной задержки, аналогичной блоку программной задержки из лабораторной работы МПТ-2.

Сохранить в стеке содержимое регистра С

Записать число N1 из регистра B в регистр С

Нет операции

Уменьшить содержимое регистра С на 1

Нет

С=0 ?

Да

Восстановить из стека содержимое регистра С

Возврат из подпрограммы

Рисунок 1 Алгоритм простой программы временной задержки

9

Рассмотрим пример использования подпрограммы временной задержки при организации звуковых сигналов в микро-ЭВМ. В микро-ЭВМ звуковые сигналы могут формироваться простейшей схемой (рис.2), на вход которой со звуковой частотой записываются по очереди "0" и "1". Будем считать, что устройство формирования звуковых сигналов имеет адрес 80h. Схема алгоритма работы подпрограммы генерации звуковых колебаний (подпрограмма 2) приведена на рис.3. В качестве подпрограммы DLY используется подпрограмма 1.

+ 5B

R2

c D0 MД

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

___

 

 

 

 

 

 

 

 

 

D

T

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

&

 

 

 

 

 

 

 

R1

 

 

 

WR

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

VT1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

___

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 2 Схема формирования звуковых сигналов

Подпрограмма 2

 

 

 

Адрес

Машинный

Метка

Мнемокод

Комментарий

 

код

 

 

 

0A00

AF

BPP:

XRA A

очистить аккумулятор

0A01

D3 04

 

 

записать 00h в выходное

0A03

D3 08

 

OUT BP

устройство

0A05

CD 00 09

 

CALL DLY

вызвать подпрограмму

 

 

 

 

временной задержки

0A08

2F

 

CMA

записать код FFh в

 

 

 

 

аккумулятор

0А09

D3 04

 

OUT BP

записать код FFh в

 

D3 08

 

 

выходное устройство

0A0D

CD 00 09

 

CALL DLY

вызвать подпрограмму

 

 

 

 

временной задержки

0A10

C9

 

RET

Возврат из подпрограммы

10

Следующая программа MAIN (программа 3) представляет программу генерации сигналов с частотой, задаваемой числом с входного регистра.

СALL BPP

Записать в выходное устройство 0

Вызвать подпрограмму DLY

Записать в выходное устройство 1

Вызвать подпрограмму DLY

RETURN

Рисунок 3 Алгоритм подпрограммы выдачи звукового сигнала Программа 3

Адрес

Машинный

Метка

Мнемокод

Комментарий

 

код

 

 

 

0800

DB 05

MAIN:

IN P_IN

записать число извходного

 

 

 

 

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

0802

47

 

MOV B,A

сохранить число в регистре

 

 

 

 

временного хранения B

0803

CD 00 0A

 

CALL BPP

вызвать подпрограмму

 

 

 

 

BPP

0806

C3 00 08

 

JMP MAIN

продолжить с начального

 

 

 

 

адреса

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