Двоичная запись числа 5:0000 0000 0000 0101
Инверсия бит: 1111 1111 1111 1011
---------------------------------
Результат=-5: 1111 1111 1111 1011
Если сложить число -5 в дополнительном коде с числом 6, получим:
Число -5: 1111 1111 1111 1011
Число 6: 0000 0000 0000 0110
----------------------------
Число 1: 0000 0000 0000 0001
Как видим, результат получился верным.
При записи числа в дробном формате предполагается, что запятая размещается между какими-то определенными двоичными разрядами в числе. Биты слева от запятой представляют целую часть числа, а биты справа от запятой дробную часть числа. Существует два способа указания местоположения запятой, в формате с фиксированной точкой и в формате с плавающей точкой.
Формат с фиксированной точкой располагает запятую в одном, предопределенном месте. Часто это местоположение слева от всех разрядов числа, когда все разряды отводятся под дробную часть, или справа от всех разрядов, когда все разряды отводятся под целую часть. Местоположение запятой устанавливается программным способом. Некоторые арифметические операции, например умножение, могут изменять позицию запятой, поэтому может понадобиться сдвиг, чтобы сохранить число в том же формате с фиксированной точкой.
Формат с плавающей точкой состоит из двух частей, которые представляют значение мантиссы и экспоненты числа. Экспонента указывает местоположение запятой. Она может храниться вместе с мантиссой или в отдельном регистре.
Семейство процессоров ADSP-21XX поддерживают операции с числами в формате с фиксированной точкой. В настоящем изложении при указании формата числа используется запись L.R, где L — число двоичных разрядов слева от запятой, a R — число разрядов справа от запятой. Например, формат записи 1.15 указывает на то, что дробное число имеет один знаковый разряд и 15 разрядов для представления величины дробной части. Целое число имеет для такого представления формат записи 16.0. Для большинства приложений обработки сигналов предполагается использование дробных чисел в формате 1.15, поскольку умножитель и делитель процессора ADSP-2181 оптимизированы для операций с числами именно в таком формате.
Ассемблер ADSP-21XX поддерживает четыре формата представления данных при вычислениях. Формат представления данных имеет следующие условные названия: двоичная строка, двоичные числа без знака, знаковые числа в дополнительном коде и дробное представление.
Двоичная строка является самым простым форматом представления чисел в процессорах семейства ADSP-21XX. Этот формат используется при выполнении элементарных логических операций типа NOT, OR, AND и XOR. Ниже приведены весовые значения битов для этого формата записи.
21521421321221121029282726252423222120
Под двоичными числами без знака понимаются положительные числа. Диапазон их представления в процессоре в два раза больше чем у чисел со знаком, за счет самого знакового разряда. Фактически они выглядят также, как двоичная строка.
Знаковые числа можно отнести к числам в дополнительном коде. Большинство операций процессора поддерживают работу с числами в дополнительном коде. Процессоры семейства ADSP-21XX не поддерживают работу с остатками и числами в двоично-десятичном формате BCD (Binary Coded Decimal), когда каждая десятичная цифра представляется 4-битным двоичным позиционным кодом. Ниже приведены весовые значения битов для этого формата знаковых чисел.
-2021421321221121029282726252423222120
Дробное представление чисел имеет формат записи 1.15. Это означает, что 16-разрядное число имеет один знаковый разряд и пятнадцать дробных битов. Ниже представлены весовые значения битов в формате 1.15.
-202-12-22-32-42-52-62-72-82-92-102-112-122-132-142-15
Для вычисления числа, записанного в этом формате, необходимо подставить вместо цифры 2 значение соответствующего разряда (0 или 1) и сложить все полученные значения. В табл. 12.1 приведены примеры соответствия чисел записанных в шестнадцатеричном виде формата 1.15 их десятичным значениям.
Таблица 12.1 Примеры соответствия чисел, записанных в шестнадцатеричном виде формата 1.15, их десятичным значениям
Как видно из таблицы, самый младший разряд эквивалентен десятичному значению 0,000030517578125. Это значение и определяет точность представления всех чисел в данном формате. Для достижения большей точности необходимо расширять разрядность числа, например программным образом размещая число в два или три 16-разрядных регистра. Аналогично можно увеличить и диапазон обрабатываемых чисел.
В табл. 12.2 приведены все возможные варианты форматов для 16-разрядного числа. Эта таблица дает наглядное представление о том, как изменяется, в зависимости от формата, диапазон представляемых чисел и их точность.
Таблица 12.2 Возможные варианты форматов для 16-разрядного числа
Из таблицы видно, что чем больше двоичных разрядов отводится под целую часть числа, тем больший диапазон чисел можно охватить с помощью такого формата. Однако при этом снижается точность представления числа, т.е. его дробная часть сводится к нулю. И наоборот, чем больше двоичных разрядов отводится под дробную часть числа, тем меньший диапазон чисел можно охватить с помощью такого формата. Но при этом увеличивается точность представления числа, т.е. его дробная часть может быть очень малой величиной, составляющей менее одной миллиардной доли единицы.
В зависимости от типа решаемой задачи программист сам определяет, какой именно формат лучше использовать.
Глава 13. Система команд