Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
16.04.2013
Размер:
117.65 Кб
Скачать

Работа с подпрограммами.

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

a) IF-THEN

å) CASE

Рис.3 Реализация основных управляющих конструкций.

При написании подпрограмм необходимо помнить о трех сопутствующих аспектах:

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

2. Сохранениие и восстановление содержимого регистров. Необходимо помнить о сохранении в стеке регистров, содержимое которых изменяется в подпрограмме, с восстановлением прежних значений перед возвратом из подпрограммы.

3. Передача параметров. Необходимо продумать способ передачи подпрограмме параметров, которые будут ею использованы, а также способ возврата результата работы подпрограммы в основную программу.

Для передачи управления подпрограмме и возврата из нее в системе команд процессора МС68000 предусмотрены команды, представленные в таблице 3. Команды вызова подпрограммы автоматически сохраняют в стеке адрес возврата (содержимое РС, указывающего на команду, следующую за командой вызова), после чего переходят по адресу, указанному в команду вызова тем или иным способом. Как и в командах безусловного перехода, возможны два типа вызовов подпрограммы: командой JSR (jump to subroutine) и BSR (branch to subroutine). Команда JSR позволяет задать адрес перехода любым способом адресации, допустимым для передачи управления, переход может осуществляться в пределах всего адресного пространства. Команда BSR ограничивает длину перехода пределами относительной адресации (±32 кбайт). При использовании постфикса .S получается более короткий код, а длина перехода ограничивается -128 ...+127 байт.

Последней командой подпрограммы является команда возврата : RTS (return from subroutine) или RTR (return and restore condition codes). Эти команды восстанавливают из стека значение РС и передают управление по содержащемуся в нем адресу. Команда RTR, кроме того, восстанавливает из стека содержимое регистра ССR и используется, если в начале подпрограммы оно было сохранено в стеке.

Таблица 3.

Мнемоника Размерность Формат Допустимый Действие Сост. флагов

или постфикс операнда тип EA N Z V C X

JSR Безразмерная ЕА Управление РС®-(SP); - - - - -

(переход к EA®PC

подпрограмме)

BSR .S èëè áåç DST PC®-(SP) - - - - -

(переход к DST®PC

подпрограмме)

RTS Безразмерная Нет (SP)+®PC - - - - -

(возврат из

подпрограммы)

RTR Безразмерная Нет (SP)+®CCR * * * * *

(возврат с вос- (SP)+®PC

становлением ССR)

Соседние файлы в папке Motorola - Описание лаб