|
| ||
|
|
||
|
| ||
Представление данных
В языке ассемблера имеются средства записи целых и вещественных чисел, а также
символьных строк и отдельных символов. Целые числа могут быть со знаком и без
знака, а также записанными в двоично-десятичном формате. Для целых чисел и символов
в составе команд микропроцессора и, соответственно, в языке ассемблера, есть средства
обработки - анализа, сравнения, поиска и проч. Для вещественных чисел таких средств
в самом микропроцессоре нет, они содержатся в арифметическом сопроцессоре. Поскольку
программирование сопроцессора в настоящей книге не рассматривается, то и вещественными
числами мы заниматься не будем.
Рассмотрим сначала целые числа без знака и
со знаком. Числа без знака получили свое название потому, что среди этих чисел
нет отрицательных. Это самый простой вид чисел: они представляют собой весь диапазон
двоичных чисел, которые можно записать в байте, слове или двойном слове. Для байта
числа без знака могут принимать значения от 00h (0) до FFh (255); для слова -
от 0000h (0) до FFFFh (65535); для двойного слова - от 00000000h (0) до FFFFFFFFh
(4294967295).
В огромном количестве приложений вычислительной техники для
чисел нет понятия знака. Это справедливо, например, для адресов ячеек памяти,
кодов ASCII символов, результатов измерений многих физических величин, кодов управления
устройствами, подключаемыми к компьютеру. Для таких чисел естественно использовать
весь диапазон чисел, записываемых в ячейку того или иного размера. Если, однако,
мы хотим работать как с положительными, так и с отрицательными числами, нам придется
половину чисел из их полного диапазона считать положительными, а другую половину
- отрицательными. В результате диапазон изменения числа уменьшается в два раза.
Кроме того, необходимо предусмотреть систему кодирования, чтобы положительные
и отрицательные числа не перекрывались.
В вычислительной технике принято записывать
отрицательные числа в так называемом дополнительном коде, который образуется из
прямого путем замены всех двоичных нулей единицами и наоборот (обратный код) и
прибавления к полученному числу единицы. Это справедливо как для байтовых (8-битовых)
чисел, так и для чисел размером в слово или в двойное слово (рис. 2.8)

Рис. 2.8. Образование отрицательных чисел различного размера.
Такой
способ образования отрицательных чисел удобен тем, что позволяет выполнять над
ними арифметические операции по общим правилам с получением правильного результата.
Так, сложение чисел +5 и -5 дает 0; в результате вычитания 3 из 5 получается 2;
вычитание -3 из -5 дает -2 и т.д.
Анализируя алгоритм образования отрицательного
числа, можно заметить, что для всех отрицательных чисел характерно наличие двоичной
единицы в старшем бите. Положительные числа, наоборот, имеют в старшем бите 0.
Это справедливо для чисел любого размера. Кроме того, из рис. 2.8 видно, что для
преобразования отрицательного 8-битового числа в слово достаточно дополнить его
слева восемью двоичными единицами. Легко сообразить, что для преобразования положительного
8-битового числа в слово его надо дополнить восемью двоичными нулями. То же справедливо
и для преобразования слова со знаком в двойное слово со знаком, только добавить
придется уже не 8, а 16 единиц или нулей. В системе команд МП 86 и, соответственно,
в языке ассемблера, для этих операций предусмотрены специальные команды cbw и
cwd.
Следует подчеркнуть, что знак числа условен. Одно и то же число, например,
изображенное на рис. 2.8 8-битовое число FBh можно в одном контексте рассматривать,
как отрицательное (-5), а в другом - как положительное, или, правильнее, число
без знака (FBh=251). Знак числа является характеристикой не самого числа, а нашего
представления о его смысле.
На рис. 2.9 представлена выборочная таблица 16-битовых
чисел с указанием их машинного представления, а также значений без знака и со
знаком. Из таблицы видно, что для чисел со знаком размером в слово диапазон положительных
значений простирается от 0 до 32767, а диапазон отрицательных значений - от -1
до -32768.

Рис. 2.9. Представление 16-битовых чисел без знака и со знаком.
На рис. 2.10 представлена аналогичная таблица для 8-битовых чисел. Из таблицы видно, что для чисел со знаком размером в байт диапазон положительных значений простирается от 0 до 127, а диапазон отрицательных значений - от -1 до -128.

Рис. 2.10. Представление 8-битовых чисел без знака и со знаком.
Среди команд процессора,
выполняющих ту или иную обработку чисел, можно выделить команды, безразличные
к знаку числа (например, inc, add, test), команды, предназначенные для обработки
чисел без знака (mul, div, ja, jb и др.), а также команды, специально рассчитанные
на обработку чисел со знаком (imul, idiv, jg, jl и т.д.). Особенности использования
этих команд будут описаны в следующей главе.
Рассмотрим теперь другой вид
представления чисел - двоично-десятичный формат (binary-coded decimal , BCD),
используемый в ряде прикладных областей. В таком формате выдают данные некоторые
измерительные приборы; он же используется КМОП-часами реального времени компьютеров
IBM PC для хранения информации о текущем времени. В МП 86 предусмотрен ряд команд
для обработки таких чисел.
Двоично-десятичный формат существует в двух разновидностях:
упакованный и распакованный. В первом случае в байте записывается двухразрядное
десятичное число от 00 до 99. Каждая цифра числа занимает половину байта и хранится
в двоичной форме. Из рис. 2.11 можно заметить, что для записи в байт десятичного
числа в двоично-десятичном формате достаточно сопроводить записываемое десятичное
число символом h.

Рис. 2.11. Упакованный двоично-десятичный формат.
В машинном слове или в 16-разрядном регистре можно хранить в двоично-десятичном формате четырехразрядные десятичные числа от 0000 до 9999 (рис.2.12).

Рис. 2.12. Запись десятичного числа 9604 в слове.
Распакованный формат отличается от упакованного тем, что в каждом байте записывается лишь одна десятичная цифра (по-прежнему в двоичной форме). В этом случае в слове можно записать десятичные числа от 00 до 99 (см. рис. 2.13)

Рис. 2.13. Запись десятичного числа 98 в распакованном виде.
При хранении десятичных чисел в аппаратуре обычно используется более экономный упакованный формат; умножение и деление выполняются только с распакованными числами, операции же сложения и вычитания применимы и к тем, и к другим. Примеры операций с двоично-десятичными числами будут рассмотрены в следующей главе.
| Физика лабы | ||||||||
| ||||||||