2.4.2. Регистры FPU

FPU предоставляет восемь регистров для хранения данных и пять вспомога­тельных регистров.

Регистры данных (RO - R7) не адресуются по именам, как регистры основного процессора,арассматриваютсявкачествестека,вершинакоторогоназывается8Т; более глубокие элементы - ST(1), ST(2) и так далее до ST(7). Если, например, в какой-то момент времени регистр R5 называется ST (см. рис. 13), то после запи­си в этот стек числа оно будет записано в регистр R4, который станет называться ST, R5 станет называться        и т. д.

RO R1 R2 R3 R4 R5

R6

R7

79

CR SR TW

47

ST(3) ST(4) ST(5) ST(6)

ST(7)

ST

ST(1) ST(2)

FIP

FDP

TOP=5

15

Рис. 13. Регистры FPU

3 Assembler для DOS

Крегистрам КО - И7нельзя обращаться напрямую, по именам, но если про­цессор поддерживает расширение ММХ, то мантиссы, находящиеся в этих регистрах, становятся доступны, как ММО - ММ7.

Регистр состояний SR содержит слово состояния FPU:

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

и его значение всегда совпадает с ES бит 14: СЗ - условный флаг 3

биты 13-11: ТОР - число от 0 до 7, показывающее, какой из регистров данных

RO - R7 в настоящий момент является вершиной стека бит 10: С2- условный флаг 2 бит 9: С1  - условный флаг 1 бит 8: СО - условный флаг О

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

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

бит 5: РЕ - флаг неточного результата - результат не может быть представ­лен точно

бит 4: UE - флаг антипереполнения - результат слишком маленький бит 3: ОЕ - флаг переполнения - результат слишком большой бит 2: ZE  - флаг деления на ноль '- выполнено деление на ноль бит 1: DE — флаг денормализованного операнда — выполнена операция над

числом

бит 0: IE - флаг недопустимой операции - произошла ошибка стека (SF = 1) или выполнена недопустимая операция

Биты СО - СЗ применяются так же, как и биты состояния в основном процес­соре, - их значения отражают результат выполнения предыдущей команды и ис­пользуются для условных переходов; команды

fstsw ax sahf

копируют значения битов в регистр FLAGS так, что флаг СО переходит в CF, C2 -

в PF, а СЗ - в ZF (флаг С2 теряется).

Биты 0-5 отражают различные ошибочные ситуации, которые могут возникать при выполнении команд FPU. Они рассмотрены в описании управляющих регистров. Регистр управления CR: биты 15-13: зарезервированы;

бит 12:1С - управление бесконечностью (поддерживается для совместимо­сти с 8087 и 80287 - вне зависимости от значения этого би­та +оо > -те);

биты 11-10: RC - управление округлением; биты 9-8: PC      - управление точностью;биты 7-6: зарезервированы;

бит 5: РМ — маска неточного результата;

бит 4: UM - маска антипереполнения;

бит З: ОМ - маска переполнения;

бит 2: ZM - маска деления на ноль;

бит 1: маска операнда;

бит 0: IM - маска недействительной операции.

Биты RC определяют способ округления результатов команд FPU до задан­ной точности (см. табл. 10).

Таблица 10. Способы округления

Значение RC

Способ округления

О

К ближайшему числу

1

К отрицательной бесконечности

2

К положительной бесконечности

З

К нулю

Биты PC определяют точность результатов команд FADD, FSUB, FSUBR, FMUL, FDIV, FDIVR и FSQRT (см. табл. И).

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

Значение PC

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

О

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

1

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

2

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

З

Расширенная точность (80-битные числа)

Биты 0-5 регистра CR маскируют соответствующие исключения - если ,мас-.кирующий бит установлен, исключения не происходит, а результат вызвавшей его команды определяется правилами для каждого исключения специально.

Регистр тэгов TW содержит восемь пар битов, описывающих содержание каж­дого регистра данных: биты 15-14 описывают регистр R7, 13-12 - R6 и т. д. Если пара битов (тэгов) равна 11, соответствующий регистр пуст. 00 означает, что ре­гистр содержит число, 01 — ноль, 10 — не-число, бесконечность, денормализован-ное число, неподдерживаемое число.

Регистры FIP и FDP содержат адрес последней выполненной команды (кро­ме FINIT, FCLEX, FLDCW, FSTCW, FSTSW, FSTSWAX, FSTENV, FLDENV, FSAVE, FRSTOR и FWAIT) и адрес ее операнда соответственно и используются

в обработчиках исключений для анализа вызвавшей его команды.