Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lb_MPT.DOC
Скачиваний:
7
Добавлен:
01.04.2025
Размер:
481 Кб
Скачать
☆

Лабораторная работа 4 Подпрограмма и стек

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

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

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

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

Для вызова подпрограмм и возврата из них используются команды:

CALL<A2><A1> и RET.

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

Стек - специально организованная область ОЗУ, задействованная в микро-ЭВМ для временного хранения данных или адресов. Число, записанное в стек последним, извлекается из него первым. Команда RET (C9) помещает в программный счетчик последнее записанное на данный момент в стеке число. После этого выполнение программы будет осуществляться с этого адреса. Любая подпрограмма должна заканчиваться командой RET. Автоматическое сохранение и восстановление адреса основной программы при выполнении подпрограмм позволяет сделать подпрограммы вложенными, т. е. осуществить вызов одной подпрограммы из другой. Уровень вложенности для данной микро-ЭВМ определяется лишь размером стека.

Существуют также команды условного вызова подпрограммы и возврата из них. Они позволяют вызвать подпрограмму и возвратиться из нее по определенному состоянию заданных разрядов регистра признаков (аналогично командам условных переходов). Все команды условного вызова подпрограммы - трехбайтные, во втором и третьем байтах сообщается начальный адрес подпрограммы. Команды вызова подпрограмм и возврата из них используют стек и внутренний регистр МП БИС SP (STACK POINTER) для адресации к стеку.

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

При записи в стек содержимого пары регистров или программного счетчика по адресу SP-1 записывается содержимое старшего регистра из указанной пары или старший байт PCH программного счетчика, а по адресу SP-2 в стек записывается содержимое младшего регистра из указанной пары младшего байта PCL программного счетчика.

При записи из стека данных в пару регистров или программный счетчик в младший регистр пары или PCL записывается число из адреса, указанного в указателе стека SP, а в старший регистр пары или PCH - число, записанное по адресу SP+1. В результате выполнения команды содержимое указателя стека SP увеличивается на 2. Данные в памяти не изменяются, а лишь происходит их чтение и увеличение содержимого SP.

Таким образом, при записи данных адреса стека растут от больших к меньшим, а указатель стека SP всегда содержит последний адрес стека, в котором записано число.

При разработке программ необходимо первоначально назначать область стека, записывая в SP адрес с помощью команды LXI SP<A2><A1> или команды SPHL.

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

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

Обычно в виде подпрограмм записываются многократно используемые фрагменты программ, например подпрограмма выдачи звукового сигнала, подпрограмма обслуживания клавиатуры и дисплея и т. д.

Алгоритм работы простой подпрограммы временной задержки приведен на рис.4.7.

Общее время задержки вычисляется по формуле:

TD = t1 + ( t2 + t3 + t4 ) N1 + t5,

где: N1 - число, первоначально записанное в счетчике.

В качестве счетчика выбран регистр B, в который записывается число N1 из регистра C.

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

Время записи числа N1 в регистр B и возврата из подпрограммы t1+t5 фиксировано и в цикл не входит. Минимальная задержка для приведенной подпрограммы определяется при N1 = 01 и равна:

TD MIN = t1 + t2 + t3 + t4 + t5.

Максимальная задержка имеет место при N1 = 00 и вычисляется по формуле:

TD MAX = t1 + (t2 + t3 + t4 ) 256 + t5.

Подпрограмма DLY (подпрограмма П.10) представляет подпрограмму временной задержки, записанную в соответствии с алгоритмом, представленным на рис. П.7.

Подпрограмма П.10

Адрес

Машинный

код

Метка

Мнемокод

Комментарий

0900

41

MOV B,C

;записать число из регистра

;С в регистр В

0901

00

DLY

NOP

;нет операции

0902

05

DCR B

;уменьшить число в регистре В на 1

0903

С2 0109

JNZ DLY

;если число, записанное в регистре

;В, не равно нулю, то идти на DLY

0906

С9

RET

Подпрограмма П.11

Адрес

Машинный код

Метка

Мнемокод

Комментарий

0A00

AF

BPP

XRA A

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

0A01

D3 04

OUT BP

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

0A03

CD 0009

CALL DLY

;вызвать подпрограмму задержки

0A06

2F

CMA

;записать код FF в аккумулятор

0A07

D3 04

OUT BP

;записать код FF в выходное ;устройство

0A09

CD 0009

CALL DLY

;вызвать подпрограмму задержки

0A0C

C9

RET

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

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

Программа П.12

Адрес

Машинный

код

Метка

Мнемокод

Комментарий

0800

DB 05

MAIN

IN 05

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

;в аккумулятор

0802

4F

MOV C, A

;записать число в регистр C

0803

CD 000A

CALL BPP

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

0806

C3 0008

JMP MAIN

;продолжать

Подпрограмма П.13

Адрес

Машинный

код

Метка

Мнемокод

Комментарий

0429

C5

DELA

PUSH B

;сохранить содержимое

;регистров В и С в стеке

042A

01 0100

LXI B, 0001

;установить

042D

C3 3104

JMP DEL1

;длительность 1мс

0430

C5

DELB

PUSH B

;сохранить содержимое

;регистров В и С в стеке

0431

F5

DEL1

PUSH PSW

;сохранить содержимое PSW в стеке

0432

AF

XRA A

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

0433

D5

PUSH D

;сохранить содержимое

;регистров D и E в стеке

0434

16 67

DEL2

MVI D,TIME

;загрузить счетчик 1мс задержки

0436

15

DEL3

DCR D

;уменьшить содержимое счетчика на 1

0437

C2 3604

JNZ DEL3

;если не ноль, продолжать

04A

0B

DCX B

;уменьшить содержимое

;счетчика длительности на 1

043B

B8

CMP B

;

043C

C2 3404

JNZ DEL2

;

043F

B9

CMP C

;

0440

C2 3404

JNZ DEL2

;если не 0, продолжать

0443

D1

POP D

;восстановить содержимое

;регистров D,E

0444

F1

POP PSW

;то же, PSW

0445

C1

POP B

;то же, B,C

0446

C9

RET

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

Рассмотрим это на примере подпрограммы регулируемой временной задержки (подпрограмма П.13).

Программа состоит из двух подпрограмм:

DELB (адрес 0430) и DELA (адрес 0429).

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

Частным случаем подпрограммы DELB является подпрограмма DELA, осуществляющая фиксированную задержку в 1 мс и не имеющая входных параметров. Таким образом, если необходимо иметь в программе фиксированную задержку в 1 мс, то можно обращаться с помощью команды CALL к подпрограмме DELA. При необходимости получения определенной заданной временной задержки в программе необходимо записать соответствующее число в регистры B,C, а затем вызвать подпрограмму DELB

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

  1. Изучите временные диаграммы выполнения микро-ЭВМ команд CALL<A2><A1> и RET.

  2. Ознакомьтесь с командами вызова и возврата из подпрограммы по условию для МП БИС .

  3. Определите, при каких числах, записанных в регистре В, подпрограмма П.9 будет осуществлять минимальное и максимальное время задержки. Определите эти времена, если машинный такт Т=1 мкс.

  4. Разработайте подпрограмму 5- и 10- секундной временной задержки.

  5. Составьте программу, последовательно включающую светодиоды выходного устройства на время соответственно 10 и 5 с. При разработке программы воспользуемся подпрограммами, разработанными в п.4 задания (рис. 4.10).

  6. Определите для подпрограммы П.13, при каких числах в регистрах В и С будет максимальное и минимальное время задержки. Определите эти времена, если машинный такт Т=1 мкс.

  7. Разберите программу П.14, определяющую, какой из восьми переключателей входного устройства (адрес 05) микро-ЭВМ установлен в положение "0":

а) составьте алгоритм работы программы П.14;

б) запишите подпрограмму, используемую в программе П.14;

в) установите, в каком регистре МП БИС содержится информация о номере переключателе входного устройства, установленном в "0";

г) определите, как будет работать программа П.14, если на входном устройстве будут установлены в положение "0" не один, а несколько переключателей.

Программа П.14

Адрес

Машинный

код

Метка

Мнемокод

Комментарий

0800

31 B00B

LXI SP,0BBO

;запись в указатель стека SP

;адрес 0900

0803

DB 20

WAITC

IN 20

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

;устройства

0805

FE FF

CPI FF

;содержит ли какой-либо разряд

;число 0

0807

CA 0308

JZ WAITC

;если нет, то ждать

080A

CD 1008

CALL IDSW

;если да, то вызвать подпрограмму

;определения разряда,

;в котором записан 0

080D

CF

RST 1

;окончить выполнения программы

0810

06 FF

IDSW

MVI B, FF

;записать в регистр B число FF

0812

04

SRCH

INR B

;увеличить содержимое

;регистра В на 1

0813

0F

RRC

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

;вправо

0814

DA 1208

JC SRCH

;если С=1, то продолжать

0817

C9

RET

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

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

Задание 1. Исследовать процесс выполнения команд вызова и возврата из подпрограммы, а также команд работы со стеком

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

  1. Ввести в микро-ЭВМ подпрограмму П.15.

  2. Выполнить программу П.15 по командам, используя режим выполнения программы по командам. После каждой команды проверить содержимое всех регистров МП БИС.

  3. Выполнить команды CALL STDY , PUSH PSW , POP , RET по машинным циклам и построить временные диаграммы их выполнения микро-ЭВМ.

  4. Заменить в подпрограмме П.15 команду POP PSW на команду NOP(00) и проследить, как будет выполняться подпрограмма П.15. Объяснить происшедшие изменения.

Подпрограмма П.15

Адрес

Машинный

код

Метка

Мнемокод

Комментарий

0800

31 B00B

LXI SP,0BB0

;записать в указатель стека SP

адрес 0BB0

0803

CD 0708

CALL STDY

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

0806

CF

RST 1

;остановить выполнение ;подпрограммы

0807

F5

STDY

PUSH PSW

;записать слово состояние МП БИС

;в стек

0808

C5

PUSH B

;записать содержимое регистров

;В,С в стек

0809

D5

PUSH D

;записать содержимое регистров

;D,E в стек

080A

E5

PUSH H

;записать содержимое регистров

;H,L в стек

080B

3E 05

MVI A, 05

;записать в регистр А число 05

080D

47

MOV B, A

;записать число из регистра А в ;регистр В

080E

87

ADD A

;удвоить содержимое аккумулятора

080F

5F

MOV E, A

;записать число из регистра А

;в регистр Е

0810

67

MOV H, A

;записать число из регистра А

;в регистр Н

0811

E1

POP H

;записать числа из стека

;в регистры H, L

1812

D1

POP D

;записать числа из стека в

;регистры D, E

0813

C1

POP B

;записать числа из стека

;в регистры B, C

0814

F1

POP PSW

;записать слово состояния из

;стека в МП БИС

0815

C9

RET

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

Задание 2. Исследовать программу временной задержки на примере работы программы генерации звуковых колебаний (программа П.12).

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

  1. Собрать и подключить схему выдачи звуковых сигналов к микро-ЭВМ так , как показано на рис.4.8

  2. Записать полный текст программы П.12 для генерации звуковых сигналов с учетом подпрограмм П.10 и П.11 . Ввести в микро-ЭВМ программу.

  3. Установить на входном устройстве число 00.

  4. Осуществить пуск программы с адреса 0800.

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

Задание 3. Исследовать программу регулируемой временной задержки на примере программы, последовательно включающей и выключающей светодиоды выходного устройства на время соответственно 10 и 5 с .

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

  1. Ввести в микро-ЭВМ программу, разработанную в п.5 задания для домашней подготовки.

  2. Осуществить пуск программы и проверить ее выполнение микро-ЭВМ.

  3. Изменить числа, записанные в регистрах В, С, в подпрограмме регулированной временной задержки (подпрограмма П.13). Проверить возможность изменения длительности задержки.

Задание 4. Исследовать программу П.14 .

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

  1. Ввести программу П.14 в микро-ЭВМ.

  2. Установить на входном устройстве переключатели соответственно числу FF. Осуществить пуск программы. Убедиться, что микро-ЭВМ будет находиться в режиме ожидания появления “0” в любом разряде входного устройства.

  3. Установить 0 с помощью переключателей в любом из разрядов входного устройства. Проверить содержимое регистров МП БИС после окончания выполнения программы П.14.

  4. Осуществить повторный запуск программы при наличии нулей в двух разрядах входного устройства. Какое число будет записано в регистре В МП БИС после окончания выполнения программы ?

Работа на учебной ЭВМ

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

Ряд подпрограмм записан в ПЗУ микро-ЭВМ. В частности, все записанные в ПЗУ и приведенные в описании лабораторной работы программы, имеют адрес меньше 0800.

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

Содержание отчета

Отчет должен содержать:

  1. Временные диаграммы выполнения команд CALL<A2><A1>, RET.

  2. Ответы на вопросы пп.4,6 задания для домашней подготовки.

  3. Полный перечень команд вызова и возврата из подпрограмм для МП БИС КР580ВМ80.

  4. Разработанные в процессе домашней подготовки программы 5- и 10-секундной задержки.

  5. Перечень команд работы со стеком для МП БИС КР580ВМ80.

  6. Ответы на вопросы, поставленные в п.7 задания для домашней подготовки .

Задания для самопроверки

  1. Укажите количество машинных тактов выполнения команды CALL<A2><A1> .

  2. В какой последовательности записывается и считывается из стека содержимое аккумулятора и регистра признаков МП БИС при выполнении команд PUSH PSW и POP PSW .

  3. С помощью каких команд можно задать или переобозначить область памяти, отведенную под стек ?

  4. Укажите порядок выполнения микро-ЭВМ команды RET .

  5. Сравните процесс выполнения микро-ЭВМ команд CALL и RST .

  6. Как нужно изменять подпрограмму П.13, чтобы временная задержка, получаемая в результате ее выполнения, определялась числами, записанными по адресам 0В00 и 0В01 ?

  7. В какой последовательности сохраняется и извлекается содержимое регистров МП БИС в подпрограммах ?

  8. Какой минимальный адрес будет записан в указатель стека SP МП БИС при выполнении подпрограммы П.15 ?

  9. Как будет выполняться подпрограмма П.15, если вместо команды РОР в ней будет записана команда NOP ?

  10. Какое максимальное время задержки может обеспечивать подпрограмма П.10, если длительность машинного такта Т=1 мкс ?

  11. Какое максимальное и минимальное время задержки может обеспечивать подпрограмма П.13, если длительность машинного такта Т=1 мкс ?

  12. Как увеличить время задержки с использованием подпрограммы П.13 ?

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