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

Команда dBcc

Команды вида DBcc являются примечательной особенностью семейства процессоров 680000. Они служат мощным и гибким средством в органицации циклических процессов. Команды DBcc применимы ко всем 14 ранее перечисленным командам условного перехода и еще имеются две дополнительные (статические) команды для cc=T (True) и сс=F (False).

Основная форма записи команды декремента и перехода по условию:

DBcc Dn,<label>

Сначала команда проверяет условие, описанное посредством сс. Если описанное условие удовлетворяется (True), то перехода на метку label> нет и выполняется следующая команда. Если условие не удовлетворяется (False), младшее словосч¸тчика, представленное регистром Dn, уменьшается на 1. Если результат не равен -1 ($FFFF), то осуществляется переход к команде, указанной меткой <label>. В противном случае выполняется следующая команда. Надо заметить, что команды DBcc не воздействует на флаги условий и переход обеспечивается при использовании только 16-битового смещения.

На рис. 2 изображена блок-схема, поясняющая работу команд вида DBcc. Еще раз напомним, что только младшее слово регистра сч¸тчика Dn используется в команде DBcc, при ч¸м в сч¸тчик должно записываться значение, на единицу меньшее, чем число требуемых повторений цикла.

ᄉ ᄃ

Рис 2. Логическая блок-схема команды DBcc.

Как пример, иллюстрирующий работу команды DBcc, рассмотрим следующую последовательность команд:

NEXT .

.

.

CMP.L LIMIT,D3 Сравнение операндов

DBGE D2,NEXT

Предположим, что в регистре D2 было записано число $00010001. Тогда в течение первого прохода будет осуществл¸н переход на метку NEXT с декрементом регистра D2 до значения $00010000, при условии, что содержимое D3 меньше, чем операнд памяти LIMIT. В противном случае будет выполняться следующая за DBGE команда. Если эту последовательность команд повторить снова, перехода на метку NEXT не будет, потому что содержимое D2 станет $0001FFFF, то есть, -1 в D2.W. Обратите внимание, что для счетчика используется только младшее слово регистра D2. Максимальное значение содержимого счетчика равно $FFFF или 65535. Таким образом программист может задать максимальное число повторений, не превышающее 65536.

Все 14 проверяемых условий могут быть использованы как условия завершения для команды DBcc. Кроме того, условие завершения может быть определено как всегда ложное (DBF) или всегда истинное (DBT). Для команды DBF цикл заканчивается только тогда, когда Dn.W=-1. С другой стороны, команда DBT не будет приводить к переходу на метку <label> независимо от содержимого Dn.W. Другими словами, команда DBT Dn,<label>эквивалентна пустой командеNOP (No Operatin).

Приведем простейший пример организации цикла. Пусть некоторая группа команд должна выполниться 200 раз. Тогда программа будет выглядеть следующим образом:

ORG $1000

MOVE.W #199,D0 Число повторений N-1

NEXT . . . Начало тела цикла

. . . Тело цикла

DBF D0,NEXT Проверка на конец цикла

END

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

ORG $1000

STG DC.B 'A CHARACTER STRING TO BE REVERSED'

RVDSTG DS.B 33 Буфер для преобразованной строки

SIZE DC.W 33 Длина буфера в байтах

START MOVEA.W #RVDSTG,A1 Установка указателя A1 в начало

* буфера

MOVEA.W A1,A2 Установка указателя А2

MOVE.W SIZE,D7 Организуем сч¸тчик цикла

SUBQ.W #1,D7 Уменьшаем его значение на 1

LOOP MOVE.B -(A1),(A2)+ Пересылка байтов строки в буфер

ENDLP DBF D7,LOOP Проверка на окончание цикла

STOP #$2700 Останов

END START

Регистр D7 используется для задания необходимого числа циклов. Его содержимое должно быть равно числу символов в строке (включая пробелы) минус единица. Данное обстоятельство связано с тем, что цикл заканчивается при переходе содержимого счетчика от нуля к -1. Команда STOP служит для завершения выполнения программы, причем после останова процессора 68000 в регистр состояния SR заносится указанная в команде STOP константа. Напомним, что команда STOP является привилегированной и может быть исполнена только в режиме супервизора. В пользовательском режиме эта команда приведет к возникновению прерывания.

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