Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Аппаратное обеспечение IBM PC

© Александр Фролов, Григорий Фролов
Том 2, книга 1, М.: Диалог-МИФИ, 1992.

[Назад] [Содеожание] [Дальше]

12.2. Целые числа

Арифметический сопроцессор наряду с вещественными числами способен обрабатывать и целые числа. Он имеет команды, выполняющие преобразования целых чисел в вещественные и обратно.

Возможно четыре формата целых чисел:

  • целое число;
  • короткое целое число;
  • длинное целое число;
  • упакованное десятичное число.

Целое число занимает два байта. Его формат полностью соответствует используемому центральным процессором. Для представления отрицательных чисел используется дополнительный код. Короткое целое и длинное целое имеют аналогичные форматы, но занимают, соответственно, 4 и 8 байтов.

Упакованное десятичное число занимает 10 байтов. Это число содержит 18 десятичных цифр, расположенных по две в каждом байте. Знак упакованного десятичного числа находится в старшем бите самого левого байта. Остальные биты старшего байта должны быть равны 0.

Существуют команды сопроцессора, которые преобразуют числа в формат упакованных десятичных чисел из внутреннего представления в расширенном вещественном формате. Если программа делает попытку преобразования в упакованный формат денормализованных чисел, нечисел, бесконечности и т.п., в результате получается неопределенность. Неопределенность в упакованном формате представляет из себя число, в котором два старших байта содержат единицы во всех разрядах. Содержимое остальных восьми байтов произвольно. При попытке использовать такое упакованное число в операциях фиксируется ошибка.

Мы подробно рассмотрели формат представления вещественных чисел и отметили, что в этом формате для представления отрицательных чисел используется специальный знаковый бит. Для целых чисел используется дополнительный код.

В дополнительном коде положительные числа содержат нуль в самом старшем бите числа:

0XXX XXXX XXXX XXXX


Для получения отрицательного числа в дополнительном коде из положительного надо инвертировать каждый бит числа и затем прибавить к числу единицу.

Например, число +5 в дополнительном коде выглядит следующим образом:

0000 0000 0000 0101 = +5


Для получения числа -5 вначале инвертируем значение каждого бита:

1111 1111 1111 1010


Теперь прибавим к полученному числу +1:

1111 1111 1111 1011 = -5


Приведем возможные варианты представления целых чисел:

Нуль    
        -------------------¬
        ¦      0...0       ¦
        L-------------------

Наименьшее положительное число
        -------------------¬
        ¦      0...1       ¦
        L-------------------

Наибольшее отрицательное число
        -------------------¬
        ¦      1...1       ¦
        L-------------------

Наибольшее положительное число
        -------------------¬
        ¦      01...1      ¦
        L-------------------

Наименьшее отрицательное число
        -------------------¬
        ¦      10...01     ¦
        L-------------------
Неопределенность
        -------------------¬
        ¦      10...00     ¦
        L-------------------


Упакованное десятичное число имеет следующий вид:

¦1-й байт ¦ Девять байтов     ¦
+--T------+---T---T---T---T---+
¦Зн¦000000¦n17¦n16¦...¦n1 ¦n0 ¦
L--+------+---+---+---+---+----


На этом рисунке n0...n17 означают разряды десятичного числа. Они могут изменяться в пределах от 0000 до 1001, т.е. от 0 до 9 в десятичной системе счисления.

Теперь, после того как мы рассмотрели форматы данных, с которыми может работать арифметический сопроцессор, можно перейти к изучению внутренних регистров сопроцессора.

[Назад] [Содеожание] [Дальше]