- •Цель и содержание работы
- •Базовая архитектура семейства adsp-21xx
- •2.1. Особенности структуры
- •Вычислительные модули
- •Генераторы адресов данных. Программный автомат
- •Оперативная память
- •Внутренние периферийные устройства
- •Программно-логическая модель
- •Команды алу
- •Система команд
- •Команды умножителя-накопителя
- •Команды устройства сдвига
- •Команды пересылки данных
- •Команды передачи управления в программе
- •Многофункциональные команды
- •Другие команды
- •Форматы представления чисел
- •Запуск среды разработки программ
- •Создание проекта
- •Создание файлов кода программы
- •Компиляция и компоновка
- •Тестирование и отладка
- •Лабораторное задание
- •Контрольные вопросы
Другие команды
Из других часто используемых команд можно отметить следующие:
пустая команда (нет операции) NOP;
команды установки, сброса и переключения флага-условия
-
[IF условие]
SET
RESET
TOGGLE
FLAG.OUT
загрузка и извлечение данных из стеков
-
PUSH
POP
STS или CNTR, PC, LOOP
установка и сброс специальных режимов
ENA
DIS
BIT_REV, M_MODE, TIMER
модификация индексно-адресных регистров без обращения к памяти
-
MODIFY (
I0, I1, I2, I3
I4, I5, I6, I7
,
M0, M1, M2, M3
M4, M5, M6, M7
)
Директивы
В программе на ассемблере вместе с командами содержатся директивы, используемые на этапе трансляции программы в машинный код, но сами они не транслируются. В программном коде директивы помечаются точками.
Пример:
.VAR/DM my_array[128]
Директива, объявляющая, что в памяти данных формируется массив из 128 шестнадцатибитовых элементов, с началом по адресу my_array.
.INIT my_array: <filename.dat>
Директива считывает значение из файла данных filename.dat в массив во время сборки программы (работает только в режиме эмуляции).
.include «def2181.h»
Подключает файл def2181.h, расположенный в той же директории, что и программа, в котором как константы определены имена регистров и их отдельных бит, а также имена адресов векторов прерывания.
Форматы представления чисел
Беззнаковые двоичные числа можно представить как положительные значения с абсолютной величиной, почти в два раза превышающей абсолютное значение знакового числа той же длины. Самые младшие слова чисел с многократной точностью также представляются в беззнаковом формате.
Процессоры семейства ADSP-21xx поддерживают знаковые числа, представленные в формате с дополнительным кодом. Двоично-десятичный формат, формат с избыточными битами и величины со знаком не поддерживаются этими процессорами.
Целые числа представляются в прямом коде (рис. 4). Каждому биту соответствует определенная степень двойки, и в сумме они дают необходимое число.
Рис. 4. Представление целых беззнаковых чисел
В процессоре ADSP-2181, как во многих других, память данных разделена на шестнадцатиразрядные слова. Для увеличения количества представляемых чисел необходимо увеличить количество используемых разрядов, т.е. использовать несколько слов.
В знаковых числах, для представления знака отводится один бит, поэтому диапазон представления целых чисел со знаком от –215 − 1 = −32767 до 215 − 1 = = 32767. В качестве знакового выбирается старший бит, что дает возможность представлять положительные числа в прямом коде как числа без знака в меньшем диапазоне. Для представления чисел со знаком можно использовать три системы представления. Каждая из них получается путем модификации модуля числа, представленного в прямом коде.
Прямой код – в старший бит помещается 1, остальные биты остаются прежними (рис. 5).
Рис. 5. Знаковые числа в прямом коде
Обратный код – все биты инвертируются (рис. 6).
Рис. 6. Знаковые числа в обратном коде
Дополнительный код – все биты инвертируются, а к младшему разряду прибавляется 1 (рис. 7).
Рис. 7. Знаковые числа в дополнительном коде
Прямой код неудобен для машинных расчетов, так как при сложении двух чисел одинаковых по модулю, но с разным знаком, не получается ноль. При сложении чисел в обратном коде получается ошибка на единицу в младшем разряде, которую необходимо корректировать. Числа в дополнительном коде складываются, следуя обычным правилам сложения двоичных чисел, что уменьшает сложность арифметического устройства процессора. Поэтому наиболее широкое применение получил дополнительный код.
В документации на процессор ADSP-2181 данный формат называется 16.0. Это означает что 16 разрядов отведено под целую часть и ноль разрядов отведено под дробную часть числа.
В дробном формате двоичная точка лежит внутри числа, поэтому некоторые или все биты его абсолютного значения имеют вес меньше единицы. На рис. 8 показан формат числа, двоичная точка которого расположена слева от трех самых младших бит, и указан их вес. Такой формат имеет обозначение 13.3.
Все возможные форматы чисел разрядностью 16 бит, которые могут быть представлены в дробных форматах, приведены в табл. 10.
Рис. 8. Дробный формат 13.3 беззнакового и знакового числа
Таблица 10
Дробные форматы и их диапазоны
Формат |
Число целых бит |
Число дробных бит |
Наибольшее положительное значение (0x7FFF) в десятичной системе |
Наименьшее отрицательное значение (0x8000) в десятичной системе |
Значение наименьшего значащего бита (0x0001) в десятичной системе |
1 |
2 |
3 |
4 |
5 |
6 |
1.15 |
1 |
15 |
0.999969482421875 |
-1.0 |
0.000030517578125 |
2.14 |
2 |
14 |
1.999938964843750 |
-2.0 |
0.000061035156250 |
3.13 |
3 |
13 |
3.999877929687500 |
-4.0 |
0.000122070312500 |
4.12 |
4 |
12 |
7.999755859375000 |
-8.0 |
0.000244140625000 |
5.11 |
5 |
11 |
15.999511718750000 |
-16.0 |
0.000488281250000 |
6.10 |
6 |
10 |
31.999023437500000 |
-32.0 |
0.000976562500000 |
7.9 |
7 |
9 |
63.998046875000000 |
-64.0 |
0.001953125000000 |
8.8 |
8 |
8 |
127.996093750000000 |
-128.0 |
0.003906250000000 |
9.7 |
9 |
7 |
255.992187500000000 |
-256.0 |
0.007812500000000 |
10.6 |
10 |
6 |
511.984375000000000 |
-512.0 |
0.015625000000000 |
11.5 |
11 |
5 |
1023.968750000000000 |
-1024.0 |
0.031250000000000 |
Окончание табл. 10
1 |
2 |
3 |
4 |
5 |
6 |
12.4 |
12 |
4 |
2047.937500000000000 |
-2048.0 |
0.062500000000000 |
13.3 |
13 |
3 |
4095.875000000000000 |
-4096.0 |
0.125000000000000 |
14.2 |
14 |
2 |
8191.750000000000000 |
-8192.0 |
0.250000000000000 |
15.1 |
15 |
1 |
16383.500000000000000 |
-16384.0 |
0.500000000000000 |
16.0 |
15 |
0 |
32767.000000000000000 |
-32768.0 |
1.000000000000000 |
При выполнении сложения и вычитания оба операнда должны быть представлены в одном и том же формате, который совпадает с форматом результата. Сложение и вычитание знаковых и беззнаковых входных чисел выполняется одинаковым образом.
При умножении входные значения могут иметь различные форматы, от которых будет зависеть результат. Язык ассемблер процессоров семейства ADSP-21xx позволяет описать, являются ли оба входных значения знаковыми, беззнаковыми или и тем и другим. Расположение двоичной точки в результате определяется из ее расположения в каждом из входных значений, что показано на рис. 9. Произведением двух 16-разрядных чисел будет 32-разрядное число. Произведение двух значений с форматами М.N и P.Q будет иметь формат (M+P).(N+Q). Например, произведение двух чисел в формате 13.3 будет иметь формат 26.6, а произведение двух чисел в формате 1.15 будет иметь формат 2.30.
Главное правило
Рис. 9. Формат результата умножения
Произведением двух чисел в формате с дополнительным кодом будет число с двумя знаковыми битами. Так как один из этих битов является избыточным, все биты результата можно сдвинуть на 1 бит влево. Кроме того, если одно входное значение было в формате 1.15, то после сдвига влево формат результата окажется равным формату другого входного значения (с 16 битами дополнительной точности). Например, при умножении числа в формате 1.15 на число в формате 5.11 получается число в формате 6.26. После сдвига влево на 1 бит результат имеет формат 5.27, т.е. представляет собой число в формате 5.11 плюс 16 самых младших бит.
Во всех процессорах семейства, кроме процессора ADSP-2100, целочисленный и дробный режимы управляются битом в регистре MSTAT. При перезапуске по умолчанию для совместимости с ADSP-2100 устанавливается дробный режим.
Дробный режим характеризуется тем, что результат умножения всегда подвергается сдвигу на 1 бит влево перед записью его в регистр результата. Сдвиг влево позволяет удалить один лишний знаковый бит, когда оба операнда были знаковыми числами, и получить в итоге результат в одном из представленных выше форматах. Когда оба операнда имеют формат 1.15, результат получается в формате 2.30. В дробной части 30 бит. После сдвига влево формат результата становится равным 1.31 и может округляться до 1.15. Таким образом, при использовании дробного формата наиболее удобно работать с форматом 1.15.
В целочисленном режиме сдвига влево не происходит. Этот режим используется, когда оба операнда являются целыми числами в формате 16.0. Результат имеет формат 32.0 и также является целым числом.
