Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / motorola / 68LAB3.DOC
Скачиваний:
14
Добавлен:
16.04.2013
Размер:
299.29 Кб
Скачать

Управляющие структуры

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

1. IF <условие>

THEN <действие>

2. IF <условие>

THEN <действие1>

ELSE <действие2>

3. FOR I=<начальное значение> TO <конечное значение>

DO <действие>

4. REPEAT <действие>

UNTIL <условие>

5. WHILE <условие>

DO <действие>

6. CASE <переключатель> OF

<действие1>

<действие2>

.

.

.

<действиеN>

Для каждой из этих управляющих структур на рис. 3 приведены блок-схемы, иллюстрирующие их работу, и примеры, реализованные на ассемблере 68000. В этих примерах операнды памяти определены как слова.

a) IF-THEN

ᄉ ᄃ

á) IF-THEN-ELSE

â) FOR LOOP

ã) REPEAT-UNTIL

ä) WHILE-DO

å) CASE

Рис.3. Примеры реализации управляющих структурПодпрограммы

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

При работе с подпрограмми необходимо помнить о трех важных моментах:

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

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

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

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

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

Следующий пример иллюстрирует вызов подпрограммы:

BSR GET_DATA Вызов подпрограммы

.

.

.

* Подпрограмма GET_DATA

GET_DATA MOVE.W CCR,-(SP) Сохранить в стеке CCR

MOVEM.L D0-D7/A0-A6,-(SP) Сохранить в стеке регистры

.

.

.

MOVEM.L (SP)+,D0-D7/A0-A6 Восстановить регистры

RTR Возврат с восстановлением * CCR

Таблица 2.

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

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

JSR Безразмерная ЕА Control РС®-(SP); - - - - -

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

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

BSR .S èëè áåç <label> PC®-(SP) - - - - -

(переход к <label>®PC

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

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

(возврат из

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

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

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

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

Соседние файлы в папке motorola