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