Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 10
Unknown Author
Отметим, что в регистрах числа размером в слово хранятся в нормальном, не-перевернутом виде - за этим следят команды пересылки:
А
А+1
ВН
BL
ВХ
"Перевернутое" представление используется и для чисел размером в двойное слово: в первом байте двойного слова хранятся младшие (правые) 8 битов числа, во втором байте - предпоследние 8 битов и т. д. Например, число 12345678b хранится в памяти так:
Если рассматривать двойное слово как два слова, тогда можно сказать, что в первом слове хранятся 16 младших (правых) битов числа, а во втором слове -16 старших (левых) битов, причем каждое из этих слов в свою очередь "перевернуто".
Эти числа также представляются в виде байта, слова и двойного слова. Как байт можно представить числа от -128\до +127, как слово - от -32768 до +32767, как двойное слово - от -2147483648 до +2147483647.
В ПК знаковые числа записываются в дополнительном коде: неотрицательное число записывается так же, как и беззнаковое число, а отрицательное число х представляется беззнаковым числом 2к-|х|, где к - количество разрядов в ячейке, отведенной под число:
{х, если х >=0 2^ -|х|, если х <0
Например, дополнительным кодом числа +98 будет байт 62h или слово 0062h, а дополнительным кодом числа -98 - байт 9Eh (=158=256-98) или слово
FF9Eh (=216-98=10000h-62h).
Приведем еще несколько примеров представления знаковых чисел в дополнительном коде (при ячейке размером в байт):
доп(0) =
: 0
= 00000000
доп(1) =
: 1
= 00000001
доп(-1)
= 256-1 =
= 255 =
= 11111111
Доп(2) =
. 2
= 00000010
доп (-2)
= 256-2 =
= 254 =
= 11111110
доп(З) =
: 3
= 00000011
ДОП(-З)
= 256-3 =
= 252 =
= 11111101
доп(+126)=
: 126 :
= 01111110
доп(-126)
= 256-126 =
= 130 =
= 10000010
доп(+127)=
: 127 :
= 01111111
доп(-127)
= 256-127 =
= 129 =
= 10000001
9
доп(-128)
= 256-128 =
= 128 =
= 10000000
Из этих примеров видно, что в дополнительном коде самый левый бит играет роль знакового: для неотрицательных чисел он равен 0, а для отрицательных - 1.
Как и беззнаковые, знаковые числа размером в слово и двойное слово записываются в памяти в "перевернутом" виде. Например, число -98 как слово будет храниться в памяти таким образом:
При этом знаковый бит оказывается во втором (правом) байте слова.
Обработка числовой информации на ЭВМ, как правило, происходит следующим образом. Поскольку исходные данные и результаты записываются в привычной для людей десятичной системе, а ЭВМ работает с двоичными числами, то при вводе числа переводятся в двоичную систему, после чего происходит обработка двоичных чисел, а при выводе результаты переводятся в десятичную систему. При этом на перевод чисел из одной системы в другую, естественно, тратится время. Но если исходных данных и результатов немного, а их обработка данных занимает значительное время, тогда затраты на переводы не очень заметны.
Однако есть классы задач (например, коммерческие), для которых характерен ввод большого массива числовых данных с последующим применением к ним всего одной-двух арифметических операций и выводом также большого количества результатов. В этих условиях переводы чисел из десятичной системы в двоичную и обратно могут занять львиную долю общих затрат времени, что, конечно, невыгодно. С учетом этого в ПК предусмотрено специальное Представление целых чисел, при котором они фактически не отличаются от записи чисел в десятичной системе и которое потому практически не требует перевода чисел из внешнего представления во внутреннее и обратно, и предусмотрены команды арифметических операций над такими числами. Данное представление чисел называется двоично-десятичным (binary coded decimal, BCD-числа) и строится по следующему принципу: берется десятичная запись числа и каждая его цифра заменяется на четыре двоичные цифры (от 0000 до 1001), обозначающие эту цифру в двоичной системе. Например, число 193 будет представлено так: 0001 1001 0011.