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 в десятичной системе счисления.

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



- Начало - - Назад - - Вперед -