Программирование на Ассемблере
Рассмотрим, к примеру, команду DBF, которая работает так: сначала
проверяется регистр (первый операнд), и если там ноль, то ветвление
игнорируется. В противном случае из этого регистра вычитается единица и
происходит ветвление по второму операнду. Типичный вид цикла DBF: move #counter-1,D0 ;число итераций минус один loop: .... ;тело цикла
.... dbf D0,loop ;если D0 не равен нулю, декремент и
;ветвление Обратите внимание, что начальное содержимое счетчика должно быть на единицу
меньше, чем число повторений цикла (так как проверка счетчика производится
ДО его уменьшения).
Другие команды DBcc используются для организации циклов с дополнительным
условием. Например, DBEQ можно трактовать как \"цикл, пока не ноль\".
Примеры на применение команд DBcc мы рассмотрим в следующих разделах. Команды STOP и RESET являются привелегированными, но даже в режиме
супервизора не рекомендуется их использовать (это может привести к
\"зависанию\").
Команды TRAP имеют параметр - номер генерируемого TRAP-исключения, который
определяет адрес вектора исключения (из диапазона $0080-$00BF). Некоторые
операционные системы для 680x0 используют TRAP-векторы для своих запросов,
но об этом мы поговорим позже. Арифметические команды.
Вспомним пример с командой CMP, которую мы использовали для сравнения
содержимого регистра данных с некоторым числом. Напомним, что команда CMP
производит вычитание первого операнда из второго и на основании полученного
результата выставляет флаги условий, причем ни один из операндов не
изменяется. MC680x0 также имеет и специальную команду для вычитания - SUB,
отличие которой от CMP состоит в том, что в случае SUB результат вычитания
записывается во второй операнд, старое содержимое которого теряется.
Существует и аналогичная команда для сложения - ADD. Во многих
восьмиразрядных процессорах (например, в 6502) этим и ограничивается набор
арифметических операций, в то время как MC680x0 может еще умножать,
делить и производить ряд других действий над целочисленными операндами. Большинство арифметических команд процессора MC680x0 требуют два аргумента.
|