Читать «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 как слово будет храниться в памяти таким образом:

При этом знаковый бит оказывается во втором (правом) байте слова.

13.2. Двоично-десятичные числа

Обработка числовой информации на ЭВМ, как правило, происходит следующим образом. Поскольку исходные данные и результаты записываются в привычной для людей десятичной системе, а ЭВМ работает с двоичными числами, то при вводе числа переводятся в двоичную систему, после чего происходит обработка двоичных чисел, а при выводе результаты переводятся в десятичную систему. При этом на перевод чисел из одной системы в другую, естественно, тратится время. Но если исходных данных и результатов немного, а их обработка данных занимает значительное время, тогда затраты на переводы не очень заметны.

Однако есть классы задач (например, коммерческие), для которых характерен ввод большого массива числовых данных с последующим применением к ним всего одной-двух арифметических операций и выводом также большого количества результатов. В этих условиях переводы чисел из десятичной системы в двоичную и обратно могут занять львиную долю общих затрат времени, что, конечно, невыгодно. С учетом этого в ПК предусмотрено специальное Представление целых чисел, при котором они фактически не отличаются от записи чисел в десятичной системе и которое потому практически не требует перевода чисел из внешнего представления во внутреннее и обратно, и предусмотрены команды арифметических операций над такими числами. Данное представление чисел называется двоично-десятичным (binary coded decimal, BCD-числа) и строится по следующему принципу: берется десятичная запись числа и каждая его цифра заменяется на четыре двоичные цифры (от 0000 до 1001), обозначающие эту цифру в двоичной системе. Например, число 193 будет представлено так: 0001 1001 0011.