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