Представление чисел и арифметика в ADSP-2101 (раздел 4.3.4 в DSP-LAB)
ADSP-2101 - компьютер 16-разрядный с фиксированной точкой. Отсюда всё следует.
Формы представления чисел:
Двоичная cтрока
Это - самая простая двоичная запись; шестнадцать бит обрабатываются как набор независимых бит.
Примеры операций, использующих этот формат - логические операции: НЕ, И, ИЛИ и исключающее ИЛИ (неравнозначность). Эти операции в ALU обрабатывают операнды как двоичные строки, не обращая внимания на знаковый разряд или размещение точки. Главное - логические операции выполняются в каждом разряде независимо (т. е. без переносов).
Числа без знака
Имеют величины от 0x0000 = 0 = 00000000000000002
до 0xFFFF = 65535 = 11111111111111112.
Например, младшие слова многословных чисел обрабатываются как числа без знака.
Числа со знаком в дополнительном коде
Большинство операций ADSP- 2101 предполагает или поддерживает арифметику в дополнительном коде. Главное свойство дополнительного кода: -А = Диапазон представляемых чисел от 0x7FFF = 32767 = 01111111111111112
до 0x8000 = -32768 = 10000000000000002.
Разделительная точка находится справа и такой формат обозначается 16.0 (“шестнадцать точка нуль”).
Дробное представление: 1.15
ADSP-2101 оптимизирован для арифметических значений в дробном двоичном формате, обозначаемом 1.15 ("один точка пятнадцать"). Это - формат для чисел со знаком с фиксированной точкой. Старший бит - знаковый разряд, и пятнадцать бит дроби представляют значения от 0x7FFF = примерно +1 = 0.1111111111111112
до 0x8000 = -1 = 1.0000000000000002
Здесь младший разряд имеет вес 1/215 = 3.1*10-5
Арифметика ALU
Все операции в ALU трактуют операнды и результаты как простые двоичные строки с 16 битами, за исключением деления (DIVS). Возникающие признаки позволяют рассматривать результаты как знаковые: признак переполнения (AV) и признак отрицательного результата (AN - соответствует 1 в старшем разряде)
Логика признака переполнения (AV) основана на свойствах дополнительного кода. Он установлен (т.е. = 1), если старший бит изменяется вопреки знаку операндов и характеру операции. Например, сложение двух положительных чисел должно давать положительный результат; нарушение в знаковом разряде соответствует переполнению и устанавливает AV = 1. Прибавление отрицательной величины может приводить или к отрицательному или положительному результату, но не может вызывать переполнение.
Логика признака переноса (AC) основана на беззнаковом представлении чисел. Он установлен в 1, если возник перенос из старшего бита.
Операции ALU
Эта группа содержит арифметические и логические операции. Выполните следующие команды.
AX0 = 3;
AY0 = 5;
AR = AX0 + AY0;
Первая команда помещает десятичное число 3 в регистр AX0, вторая помещает десятичное число 5 в регистр AY0. Наблюдайте окно регистров, когда эти команды выполнены. Заданный по умолчанию режим для содержимого регистров шестнадцатеричный. Используйте короткое меню, чтобы переключаться между шестнадцатеричным и десятичным форматами. Третья команда складывает AX0 и AY0 и помещает результат в регистр AR. Регистр AR теперь примет значение 8 и все признаки будут очищены (ASTAT=0).
Теперь выполните команду вычитания.
AF = AX0 - AY0;
Регистр AF изменяется на 0xFFFE (шестнадцатеричное) или -2 (десятичное число). Признак AN установится в 1, т.к. результат отрицательный.
Теперь попробуем некоторые команды, которые приводят к арифметическому переполнению.
AX1 = 0x7FFF;
AYI = 0x7FFF;
AR = AX1 + AY1;
AX1 и AY1 установлены в 32767. Регистр AR после сложения изменяется на 0xFFFE, т.е. 65534, но интерпретируется как -2 в дополнительном коде. Это сигнализирует о переполнении и переключает признак AN. Следовательно, AV и AN установятся в 1.
AX0 = 0x9000;
AY0 = 0xA000;
AR = AX0 + AY0;
В AX0 установлено -28672, в AY0 установлено -24576. После 0x9000 + 0xA000 = 0x13000, AR изменяется на 0x3000 или 12288. Признаки переполнения и переноса AV и AC установятся в 1, но AN изменится на 0 (понятно почему).
AX0 = 0;
AY0 = 0;
AR = AX0 +AY0+ C;
Последняя инструкция складывает AX0 и AY0 наряду с битом переноса C. После того, что было установлено последней командой, AR равен 1 и все признаки очищены.
Пробуйте выполнять другие ALU команды и получать различные признаки ALU.
Арифметика MAC
Умножитель выдаёт результаты, которые являются двоичными строками. Операнды интерпретируются согласно информации, содержащейся в самой команде (знаковый на знаковый, беззнаковый на беззнаковый, разные знаки или округление). 32-битовый результат умножителя полагается знаковым, в котором знак расширен до полной 40-битной ширины набора регистров MR, состоящего из MR2, MR1 и MR0.
ADSP-2101 поддерживает два режима:
· дробный режим для дробных операндов формата 1.15 (1 бит знаковый, 15 бит дроби). При умножении 1.15 операндов получают результат формата 2.30 (30 бит дроби). Чтобы поправить дело, в дробном режиме выполняют сдвиг влево между умножителем (P) и регистром результата умножения (MR). Этот сдвиг (1 бит влево) изменяет формат результата на 1.31, который можно округлить до 1.15, не используя младшие разряды.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.