- •Микропроцессор мс68000
- •Команда dBcc
- •Команда Scc
- •Команды nop и stop
- •Управляющие структуры
- •Практическая часть.
- •Команды безусловной передачи управления .
- •Команды условного перехода.
- •Команды условного перехода с декрементом в регистре Dn
- •Команды работы с подпрограммами
- •Контрольные вопросы и задания.
Управляющие структуры
Из теории структурного программирования известно, что любая программа может быть написана с ипользованием всего лишь трех структур: следование, развилка и цикл. На практике для удобства программирования могут быть использованы дополнительно еще ряд управляющих структур. В современных языках высокого уровня часто используются, например, следующие управляющие структуры:
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)