- •Микропроцессор мс68000
- •Команда dBcc
- •Команда Scc
- •Команды jmp, nop и stop
- •Управляющие конструкции
- •Работа с подпрограммами.
- •Практическая часть.
- •Команды безусловной передачи управления .
- •Команды условного перехода.
- •1010 Nop Точка останова.
- •Команды условного перехода с декрементом в регистре.
- •Команды работы с подпрограммами
- •Подпрограмма вывода списка слов на терминал output bsr ent Перевести строку
- •Подпрограмма перевода строки
- •Контрольные вопросы и задания.
- •Команды Bcc и bra.
Команды работы с подпрограммами
Подпрограммы являются неотъемлемой частью любой более-менее сложной программы. Они представляют собой универсальный завершенный блок программы, используемый в различных ее частях.
Для передачи управления подпрограмме и возврата из нее в системе команд процессора МС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