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

Команда dBcc

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

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

DBcc Dn,<label>

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

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

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

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

NEXT .

.

.

CMP.L LIMIT,D3 Анализ (D3)-(LIMIT)

DBGE D2,NEXT

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

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

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

ORG $1000

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

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

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

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

END

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

ORG $1000

STG DC.B 'A CHARACTER STRING IS 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 - Описание лаб