Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 9

Unknown Author

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

вых чисел. Например, в байте можно представить беззнаковые числа от 0 до 255, а неотрицательные знаковые числа - только от 0 до 127. Поэтому, если известно заранее, что некоторая числовая величина является неотрицательной, то выгоднее рассматривать ее как беззнаковую, чем как знаковую.

Целые числа без знака

Беззнаковые числа могут быть представлены в виде байта, слова или двойного слова - в зависимости от их размера. Такие числа записываются в ячейки в двоичной системе счисления, занимая все разряды ячейки. Например, если4 для целого 98 отведен байт, то содержимым байта будет двоичное число 01100010 (62h), а если отведено слово, то оно будет иметь вид 0062h.

Поскольку в ячейке из к разрядов можно записать 2к различных комбинаций из 0 и 1, то в виде байта можно представить целые от 0 до 255 (=28-1), в виде слова - целые от 0 до 65535 (=216-1), в виде двойного слова - целые от 0 до 4 294 967 295 (=232-1).

Отметим "экзотическую" особенность представления чисел в ПК: числа размером в слово и двойное слово хранятся в памяти в "перевернутом" виде". Если на число отведено слово памяти, То старшие (левые) 8 битов числа размещаются во втором байте слова, а младшие (правые) 8 битов - в первом байте; в терминах шестнадцатеричной системы: первые две цифры числа хранятся во втором байте слова, а две последние цифры - в первом байте. Например, число 98 = 0062h хранится в памяти так (А - адреса слова):

А

А+1

Зачем так сделано? Как известно, сложение и вычитание многозначных чисел мы начинаем с действий над младшими цифрами (например, при сложении чисел 1234 и 5678 мы сначата складываем цифры 4 и 8), а затем постепенно переходим к более старшим цифрам. С другой стороны, первые модели ПК (с процессором 8080) были 8-разрядными, в них за раз можно было считать из памяти только один байт. Поскольку в этих условиях многозначное число нельзя считать из памяти сразу целиком, то в первую очередь приходится считывать байт, где находятся младшие цифры числа, а для этого надо, чтобы такой байт хранился в памяти первым. По этой причине в первых моделях ПК и появилось "перевернутое" представление чисел. В последующих же моделях, где уже можно было сразу считать из памяти все число, ради сохранения преемственности, ради того, чтобы ранее составленные программы могли без изменений выполняться на новых ПК, сохранили это "перевернутое" представление чисел.