- •Цель и содержание работы
- •Базовая архитектура семейства adsp-21xx
- •2.1. Особенности структуры
- •Вычислительные модули
- •Генераторы адресов данных. Программный автомат
- •Оперативная память
- •Внутренние периферийные устройства
- •Программно-логическая модель
- •Команды алу
- •Система команд
- •Команды умножителя-накопителя
- •Команды устройства сдвига
- •Команды пересылки данных
- •Команды передачи управления в программе
- •Многофункциональные команды
- •Другие команды
- •Форматы представления чисел
- •Запуск среды разработки программ
- •Создание проекта
- •Создание файлов кода программы
- •Компиляция и компоновка
- •Тестирование и отладка
- •Лабораторное задание
- •Контрольные вопросы
Команды передачи управления в программе
Команды этой группы, имеющие общепринятые мнемонические обозначения, приведены ниже:
команда [условного] перехода [IF условие] JUMP <dest>;
вызов подпрограммы [IF условие] CALL <dest>;
возврат из подпрограммы [IF условие] RTS;
прерывание [IF условие] RTI;
переход по флагу [IF <флаг-условие>] JUMP <адрес>;
вызов подпрограммы по флагу [IF <флаг-условие>] СALL <адрес>;
где IF условие − арифметическое условие;
<dest> = [(I4), (I5), (I6), (I7), <адрес>];
флаг-условие − [Not] FLAG_IN − может устанавливаться и сбрасываться с помощью специальных команд SET и RESET.
Кроме указанных команд, имеется команда организации циклов.
DO метка UNTIL условие;
{тело цикла}
метка: последняя команда,
где условие − арифметическое условие обнуления СЕ счетчика цикла CNTR.
метка − символический адрес последней команды цикла.
Используемые в командах управления последовательностью выполнения программ коды условий приведены в табл. 9.
Таблица 9
Коды условий
Синтаксис |
Условие состояния |
Истинно, если |
EQ |
Равно нулю |
AZ=1 |
NE |
Не равно нулю |
AZ=0 |
LT |
Меньше нуля |
AN.XOR.AV=1 |
GE |
Больше или равно нулю |
AN.XOR.AV=0 |
LE |
Меньше или равно нулю |
(AN.XOR.AV).OR.AZ=1 |
GT |
Больше нуля |
(AN.XOR.AV).OR.AZ=0 |
AC |
Перенос в АЛУ |
AC=1 |
NOT AC |
Нет переноса в АЛУ |
AC=0 |
AV |
Переполнение в АЛУ |
AV=1 |
NOT AV |
Нет переполнения в АЛУ |
AV=0 |
MV |
Переполнение в умножителе-накопителе |
MV=1 |
NOT MV |
Нет переполнения в умножителе-накопителе |
MV=0 |
NEG |
Операнд Х последней команды АВS был отрицательным |
AS=1 |
POS |
Операнд Х последней команды АВS был положительным |
AS=0 |
NOT CE |
Счетчик не пуст |
− |
FLAG_IN* |
Значение на выводе FI |
Последнее значение на выводе FI=1 |
NOT FLAG_IN* |
Значение на выводе FI |
Последнее значение на выводе FI=0 |
* Только в командах JUMP и CALL.
Многофункциональные команды
Имеется возможность объединять в одной команде две или три операции, соответствующие простым командам, рассмотренным ранее. Существует две основные структуры многофункциональных команд.
Структура 1
Вычислительная операция Считывание данных
ПД → Рг АЛУ, УМН
и ПП → Рг,
где ПД – память данных, Рг – регистры, ПП – память программ, УМН – умножитель.
При использовании данной структуры существуют следующие ограничения:
недопустима операция деления в АЛУ;
обращение к ПД только через генератор адреса #1, а к ПП − через генератор адреса #2;
считывание из ПД только в МХ, АХ, а из ПП − в МY, АY;
результат вычисления записывается только в AR и MR.
Структура 2
Вычислительная операция Считывание данных
АЛУ, УМН, УСД Рг ←→ Рг
или Рг ←→ ПД
или Рг ←→ ПП,
где УСД – устройство сдвига.
Примеры многофункциональных команд:
AR = AX0 ‑ АY1, АХ1 = DM(I1, M3);
MR = MR + MR0 * МY1(SS), АХ1 = MR0;
SR = SR OR LSHIFT MR2(HI), MX1 = PM(I6, M6);
При использовании второй структуры существуют следующие ограничения:
недопустимы операции деления в АЛУ и непосредственный сдвиг (SE) в устройстве сдвига;
допускается использовать только вычислительные регистры (АХ, АY и другие);
обращение к ПД только через генератор адреса #1, к ПП − через генератор адреса #2.
