Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Финогенов-основы_языка_ассемблера.doc
Скачиваний:
26
Добавлен:
17.09.2019
Размер:
3.35 Mб
Скачать

Глава 2

Основы программирования

51

изображено содержимое окна дампа после ввода начального адреса в виде DS:0 (тот же результат даст начальный адрес DSrmsg, а так же и просто msg, так как по умолчанию сегментный адрес берется из DS). Как и сле­довало ожидать, по этому адресу расположено наше единственное данное — строка текста, выводимая программой на экран. Кстати, в окне дампа видно начало промежутка между сегментами (данных и стека), заполнен­ного нулями.

ds:0000 8F ЕО АЕ ИЗ £0 АО АС АС Программ ds:0008 АО 20 £0 АО Al AE EZ АО а работа ds:0010 А5 EZ 21 24 00 00 00 00 ет?$ ds:0018 00 00 00 00 00 00 00 00

Рис. 2.7. Дамп сегмента данных.

2.2. Представление данных

В языке ассемблера имеются средства записи целых и вещественных чисел, а также символьных строк и отдельных символов. Целые числа могут быть со знаком и без знака, а также записанными в двоично-десятичном формате. Для целых чисел и символов в составе команд микропроцессора и, соответственно, в языке ассемблера, есть средства обработки — анали­за, сравнения, поиска и проч. Для вещественных чисел таких средств в самом микропроцессоре нет, они содержатся в арифметическом сопроцес­соре. Поскольку программирование сопроцессора в настоящей книге не рассматривается, то и вещественными числами мы заниматься не будем.

Рассмотрим сначала целые числа без знака и со знаком. Числа без знака получили свое название потому, что среди этих чисел нет отрица­тельных. Это самый простой вид чисел: они представляют собой весь диа­пазон двоичных чисел, которые можно записать в байте, слове или двой­ном слове. Для байта числа без знака могут принимать значения от OOh (0) до FFli (255); для слова — от OOOOh (0) до FFFFli (65535); для двойного слова - от OOOOOOOOh (0) до FFFFFFFFh (4294967295).

В огромном количестве приложений вычислительной техники для чи­сел нет понятия знака. Это справедливо, например, для адресов ячеек памяти, кодов ASCII символов, результатов измерений многих физичес­ких величин, кодов управления устройствами, подключаемыми к компь­ютеру. Для таких чисел естественно использовать весь диапазон чисел, записываемых в ячейку того или иного размера. Если, однако, мы хотим работать как с положительными, так и с отрицательными числами, нам придется половину чисел из их полного диапазона считать положитель­ными, а другую половину — отрицательными. В результате диапазон изме­нения числа уменьшается в два раза. Кроме того, необходимо предусмот­реть систему кодирования, чтобы положительные и отрицательные числа не перекрывались.

В вычислительной технике принято записывать отрицательные числа в так называемом дополнительном коде, который образуется из прямого путем замены всех двоичных нулей единицами и наоборот (обратный код) и прибавления к полученному числу единицы. Это справедливо как для байтовых (8-битовых) чисел, так и для чисел размером в слово или в двойное слово (рис. 2.8)

Для байта

0000 0101 1111 1010

+1

Дополнительный код числа 5: 1111 1011

Прямой код числа 5: Обратный код числа 5:

Для слова

0000 0000 0000 0101 1111 1111 1111 1010

+1

1111 1111 1111 1011

Для двойного слова

Прямой код числа 5: Обратный код числа 5:

0000 0000 0000 0000 0000 0000 0000 0101 1111 1111 1111 1111 1111 1111 1111 1010

+1

Дополнительный код числа 5: ЦЦ Щ1 ЦЦ цц Ш1 пи цц 1011 Рис. 2.8. Образование отрицательных чисел различного размера.

Такой способ образования отрицательных чисел удобен тем, что позво­ляет выполнять над ними арифметические операции по общим правилам с получением правильного результата Так, сложение чисел +5 и -5 дает 0; в результате вычитания 3 из 5 получается 2; вычитание -3 из -5 дает -2 и т.д.

Анализируя алгоритм образования отрицательного числа, можно за­метить, что для всех отрицательных чисел характерно наличие* двоичной единицы в старшем бите. Положительные числа, наоборот, имеют в стар­шем бите 0. Это справедливо для чисел любого размера. Кроме того, из рис. 2.8 видно, что для преобразования отрицательного 8-битового числа в слово достаточно дополнить его слева восемью двоичными единицами. Легко сообразить, что для преобразования положительного 8-битового числа в слово его надо дополнить восемью двоичными нулями. То же спра­ведливо и для преобразования слова со знаком в двойное слово со зна­ком, только добавить придется уже не 8, а 16 единиц или нулей. В системе команд МП 86 и, соответственно, в языке ассемблера, для этих операций предусмотрены специальные команды cow и cwd.

Следует подчеркнуть, что знак числа условен. Одно и то же число, на­пример, изображенное на рис. 2.8 8-битовое число FBh можно в одном кон­тексте рассматривать, как отрицательное (-5), а в другом — как положитель­ное, или, правильнее, число без знака (FBh=251). Знак числа является ха­рактеристикой не самого числа, а нашего представления о его смысле.

На рис. 2.9 представлена выборочная таблица 16-битовых чисел с ука­занием их машинного представления, а также значений без знака и со знаком. Из таблицы видно, что для чисел со знаком размером в слово Диапазон положительных значений простирается от 0 до 32767, а диапа­зон отрицательных значений — от -1 до -32768.

52