Главная страница
Предыдущая страница (зачем нужно FPU)

FPU (Floating Point Unit)

Регистры FPU (8 штук) реализованы в виде стека: st=st(0), st(1), st(2), st(3), st(4), st(5), st(6), st(7). Когда мы загружаем число в сопроцессор, оно загружается в st(0), а все другие регистры сдвигаются. Не будем допускать переполнения стека сопроцессора. Я не знаю, что при этом происходит, но описание ошибок выходит за рамки этой работы. В регистрах могут храниться данные в следующих форматах:
Короткое вещественное Бит 31 – знак мантиссы. Биты 30-23 – 8-битная_экспонента+127
Биты 22-0 – 23-битная_мантисса без первой цифры
Длинное вещественное Бит 63 – знак мантиссы. Биты 62-52 – 11-битная экспонента+1024
Биты 51-0 – 52-битная мантисса без первой цифры
Супер вещественное Бит 79 – знак мантиссы. Биты 78-64 – 15-битная экспонента+16383
Биты 63-0 – 64-битная мантисса с первой цифрой (бит 63 равен 1)
Размер, точность и пределы различных типов вещественных чисел:
Тип данных Бит значащие цифры
пределы
Короткое вещественное
4
7
Длинное вещественное
8
15-16
Супер вещественное
10
19
Вообще, сопроцессор выполняет все вычисления в расширенном 80-битном формате, а 32- и 64-битные числа используются для обмена с процессором и оперативной памятью
Также в сопроцессоре есть 2 дополнительных регистра:
1) Регистр состояния SR:
Бит 14 – C3 (условный флаг 3)
Бит 8 – С0 (условный флаг 0)
2) Регистр управления CR:
биты 11-10 – RC (управление округлением)
биты 9-8 – PC (управление точностью)
бит 5: PM – маска неточного результата
бит 4: UM – маска антипереполнения
бит 3: OM – маска переполнения
бит 2: ZM – маска деления на ноль
бит 1: DM – маска денормализованного операнда
бит 0: IM – маска недействительной операции
Если какая-либо маска равна нулю, то при происхождении действия, соответствующего маске (например, ZM=0, и произошло деление на ноль), программа вылетает. Если исключительное действие было замаскировано (соответствующая маска равна 1), то программа не вылетает
Значение RC Способ округления
0 К ближайшему числу
1 К отрицательной бесконечности
2 К положительной бесконечности
3 К нулю
Биты PC определяют точность результатов команд: fadd, fsub, fsubr, fmul, fdiv, fdivr, fsqrt
Значение PC Точность результатов
0 32-битные числа
2 64-битные числа
3 80-битные числа
Примечание: если команда оканчивается на “p” (например, fstp faddp fmulp) и существует такая же каманда без оканчания “p” (например, fst, fadd, fmul), то она после себя выталкивает из стека st(0)

Следующая страница (команды загрузки и сохранения FPU)