Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скляров И. Изучаем Assembler за 7 дней (2010).pdf
Скачиваний:
1335
Добавлен:
23.02.2015
Размер:
2.11 Mб
Скачать

http://www.sklyaroff.ru

103

fstsw ax sahf

je error

5.4. Архитектура сопроцессора

5.4.1. Типы данных FPU

Сопроцессор может выполнять операции с семью различными типами данных, представленными в табл. 5.1.

 

 

Таблица 5.1. Типы данных FPU

 

 

 

 

Тип данных

Бит

Пределы

 

 

 

 

 

Целое число

16

-32768 ... 32767

 

 

 

 

 

Короткое целое

32

-2x109 ... 2x109

 

Длинное слово

64

-9x1018 ... 9x1018

 

Упакованное десятичное (BCD)

80

-99..99 ... +99..99 (18 цифр)

 

 

 

 

 

Короткое вещественное

32

1,18x10-38 ... 3,40x1038

 

Длинное вещественное

64

2,23x10-308 ... 1,79x10308

 

Расширенное вещественное

80

3,37x10-4932 ... 1,18x104932

 

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

положительный ноль (все биты числа нули);

отрицательный ноль (знаковый бит равен 1, все остальные - нули);

положительная бесконечность (знаковый бит 0, все биты мантиссы 0, все биты экспоненты 1);

отрицательная бесконечность (знаковый бит 1, все биты мантиссы 0, все биты экспоненты 1);

денормализованное число (все биты экспоненты 0);

неопределенность (знаковый бит 1, все биты экспоненты 1, первый бит мантиссы (первые два для 80-битных чисел) – 1, остальные 0);

не-число типа SNAN (сигнальное) (все биты экспоненты 1, первый бит мантиссы 0 (для 80-битных чисел первые два бита мантиссы – 10), а среди остальных есть единицы);

не-число типа QNAN (тихое) (все биты экспоненты 1, первый бит мантиссы (первые два для 80-битных чисел) – 1, среди остальных есть единицы). Неопределенность – один из вариантов QNAN;

неподдерживаемое число (ситуации, не соответствующие стандартным числам и не описанные в специальных случаях).

5.4.2.Регистры FPU

Регистры FPU показаны на рис. 1.9, ниже идет их описание.

5.4.2.1. Регистры данных R0-R7

К регистрам данных R0-R7 нельзя обращаться напрямую по их именам, поэтому в командах используются логические обозначения этих регистров ST(0)-ST(7). В отличие от регистров центрального процессора регистры данных сопроцессора не работают независимо, а организованы в виде стека. Вершина стека всегда называется ST(0), затем идут ST(1), ST(2) и так далее до ST(7). Вместо ST(0) обычно используется краткое обозначение ST. Подробнее см. разд. 5.3.2.

http://www.sklyaroff.ru

104

5.4.2.2. Регистр состояния SWR (Status Word Register)

Слово состояния отражает общее состояние сопроцессора:

0-й бит, флаг недопустимой операции (IE);

1-й бит, флаг денормализованной операции (DE) – выполнена операция над денормализованным числом;

2-й бит, флаг деления на ноль (ZE);

3-й бит, флаг переполнения (ОЕ) – результат слишком большой;

4-й бит, флаг антипереполнения (UE) – результат слишком маленький;

5-й бит, флаг неточного результата (РЕ) – результат не может быть представлен точно;

6-й бит, ошибка стека (SF). Если С1=1, произошло переполнение (команда пыталась писать в непустую позицию в стеке), если С1=0, произошло антипереполнение (команда пыталась считать число из пустой позиции в стеке);

7-й бит, общий флаг ошибки (ES) – равен 1, если произошло хотя бы одно немаскированное исключение;

8-й бит, условный флаг 0 (C0);

9-й бит, условный флаг 1 (С1);

10-й бит, условный флаг 2 (С2);

11—13-й биты, число от 0 до 7, показывающее, какой из регистров данных R0— R7 является вершиной стека (TOP);

14-й бит, условный флаг 3 (СЗ);

15-й бит, флаг занятости FPU – этот флаг существует для совместимости с 8087,

иего значение всегда совпадает с ES.

5.4.2.3. Регистр управления CWR (Control Word Register)

Слово управления сопроцессора определяет один из нескольких вариантов обработки численных данных:

0-й бит, маска недействительной операции (IM);

1-й бит, маска денормализованного операнда (DM);

2-й бит, маска деления на ноль (ZM);

3-й бит, маска переполнения (OM);

4-й бит, маска антипереполнения (UM);

5-й бит, маска неточного результата (PM);

6-й, 7-й биты, зарезервированы;

8-й, 9-й биты, управление точностью (PC) (см. табл. 5.2);

10-й, 11-й биты, управление округлением (RC) (см. табл. 5.3);

12-й, управление бесконечностью (IC) – поддерживается для совместимости с 8087 и 80287 – вне зависимости от значения этого бита +∞ > -∞;

13—15-й биты, зарезервированы.

Биты PC определяют точность вычислений в сопроцессоре (табл. 5.2).

Таблица 5.2. Точность результатов

Значение

Точность результатов

PC

 

 

 

0

Одинарная точность (32-битные числа)

 

 

01b

Зарезервировано

 

 

10b

Двойная точность (64-битные числа)

 

 

11b

Расширенная точность (80-битные числа) (этот режим устанавливается при

 

инициализации сопроцессора)