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

Команды работы с подпрограммами

Подпрограммы являются неотъемлемой частью любой более-менее сложной программы. Они представляют собой универсальный завершенный блок программы, используемый в различных ее частях.

Для передачи управления подпрограмме и возврата из нее в системе команд процессора МС68000 предусмотрены команды, представленные в таблице 2.13. Команды вызова подпрограммы автоматически сохраняют в стеке адрес возврата (содержимое РС, указывающего на команду, следующую за командой вызова), после чего переходят по адресу, указанному в команду вызова тем или иным способом. Как и в командах безусловного перехода, возможны два типа вызовов подпрограммы: командой 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 и используется, если в начале подпрограммы оно было сохранено в стеке.

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

ORG $1000

LEA $4000,A7 Установка указателя стека по адресу

$4000

BSR OUTPUT Вызов подпрограммы вывода на экран

списка слов. Неупорядоченный список

LEA NAME,A0 Запись адреса начала списка в регистр

À0

MOVEQ #3,D7 Запись количества слов-2 в счетчик D7

LOOP1 MOVE.L D7,D6 Счетчик слов, сравниваемых с этолоном

MOVEA.L A0,A1

LOOP ADDA.L #8,A1 Адрес указывает на следующее

проверяемое слово

MOVE.B (A0),D0 Запись первого символа эталонного слова

в регистр D0

CMP.B (A1),D0 Сравнение первого символа проверяемого

слова

BCS FINISH Если эталон меньше, то перейти к метке

FINISH

BNE REPLACE Если не равно, то поменять местами

слова, иначе проверить остальные

символа слов

MOVEA.L A0,A2 Для перестановки слов скопируем

содержимое адресных регистров

MOVEA.L A1,A3 во вспомагательные регистры

CHECK MOVE.B (A2)+,D0 Запись следующего символа эталонного

слова в регистр D0

BEQ FINISH Если слово короче проверяемого, то

перейти к метке FINISH

MOVE.B (A3)+,D1 Запись следующего символа

проверяемого слова в регистр D0

BEQ REPLACE Если проверяемое слово короче

эталонного, то поменять слова местами

CMP.B D1,D0 Сравнить текущие символы

BEQ CHECK Если они равны, то сравнить следующие

символы

BLS FINISH Если эталон меньше, то перейти к метке

FINISH, иначе поменять местами слова

REPLACE MOVEQ #7,D5 Записать длину слова в регистр D5

REP1 MOVE.B (A0,D5.W),D1 Меняем слова местами

MOVE.B (A1,D5.W),(A0,D5.W) посимвольно через

MOVE.B D1,(A1,D5.W) вспомогательный регистр D1, с

использованием индексной

адресации

DBF D5,REP1 Счетчик символов в слове

FINISH DBF D6,LOOP Сравниваем следуещее слово с эталоном

ADDA.L #8,A0 После сравнения последнего слова

DBF D7,LOOP1 изменяем эталонное слово на следующее

BSR OUTPUT Вывести на терминал отсортированный

список

MOVE.B #228,D7 Выйти в TUTOR

TRAP #14

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