c4ad045e

Целые числа


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

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

  • целое число;
  • короткое целое число;
  • длинное целое число;
  • упакованное десятичное число.
  • Целое число занимает два байта. Его формат полностью соответствует используемому центральным процессором. Для представления отрицательных чисел используется дополнительный код. Короткое целое и длинное целое имеют аналогичные форматы, но занимают, соответственно, 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 в десятичной системе счисления.

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


    Содержание раздела