
- •Структура FPU
- •Числа с плавающей запятой (IEEE 754)
- •Внутренний формат FPU (10 байт)
- •Регистры FPU
- •Стек FPU
- •Загрузка значений в стек FPU
- •Выгрузка и пересылка значений
- •Команды вычислений
- •Основные арифметические операции
- •Дополнительные арифметические и трансцендентные команды
- •Сравнение вещественных чисел
- •Команды сравнения
- •Слово состояния FPU и флаги ЦП
- •Задачи

НИУ МИЭТ, ИПОВС, КАИ |
Математический сопроцессор |
1 / 18 |
Математический сопроцессор
Александра Игоревна Кононова
НИУ МИЭТ
17 ноября 2020 г. актуальную версию можно найти на https://gitlab.com/illinc/arch-cs
Структура FPU
Стек FPU FPU x87 Команды вычислений
Сравнение вещественных чисел

НИУ МИЭТ, ИПОВС, КАИ |
Математический сопроцессор |
2 / 18 |
FPU x87
Математический сопроцессор (Floating Point Unit, FPU) устройство для обработки числовых данных в формате с плавающей запятой (начиная с i486DX интегрирован в процессор, до Atom имеет почти независимое ядро):
формат данных;
собственный набор регистров данных (стек FPU), флаги;
собственная система команд (префикс f);
сообщение с ЦП в основном через память.
Внастоящее время полностью интегрирован в ЦП:
не требуется ожидание;
новые команды могут работать с флагами ЦП.
Структура FPU
Стек FPU FPU x87 Команды вычислений
Сравнение вещественных чисел

|
|
НИУ МИЭТ, ИПОВС, КАИ |
Математический сопроцессор |
|
|
|
|
3 / 18 |
|
|
||||
|
Числа с плавающей |
запятой (IEEE 754) |
|
|
|
|||||||||
|
|
|
|
|
|
( 1)s 2p |
|
|
|
|
||||
|
|
|
|
|
|
|
0;1m2m3m4 : : : mn+1 |
|||||||
|
s |
p + |
|
m2m3m4 : : : mn+1 |
|
|||||||||
|
|
|
|
|
|
|
|
pmin 6 p 6 pmax |
||||||
|
n + w n + w 1 |
n n 1 |
0 |
|
||||||||||
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
s |
|
|
m2m3m4 : : : mn+1 |
|
s |
pmin |
|
|
|
|
|
||
|
000 : : : 000 |
|
|
0;0m2m3m4 : : : mn+1 |
||||||||||
|
|
|
|
|
|
( 1) |
2 |
|||||||
|
n + w n + w 1 |
n n 1 |
0 |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
s |
|
|
|
|
|
|
|
|
s |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
000 : : : 000 |
|
000 : : : 0 |
|
( 1) |
0 |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||||||
|
n + w n + w 1 |
n n 1 |
0 |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
s |
|
|
|
|
|
|
|
|
s |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 : : : 111 |
|
000 : : : 0 |
|
( 1) |
1 |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||||||
|
n + w n + w 1 |
n n 1 |
0 |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
нечисло (nan) |
|||||||
|
x |
111 : : : 111 |
|
|
qxx : : : x |
|
||||||||
|
n + w n + w 1 |
n n 1 |
0 |
|
|
|
|
|
|
|
|
|||
|
|
|
|
x + (y + z) 6= (x + y) + z |
|
|
|
|
|
|
|
|||
32 = 1 + 8 + 23 бита одинарная точность, float |
|
2 126 6 jxj 6 2127 (2 2 23) |
||||||||||||
64 = 1 + 11 + 52 бита двойная, double |
|
2 1022 6 jxj 6 21023 (2 2 52) |
Округление: к ближайшему|чётному, к ближайшему|1, к 0, к +1 (вверх), к 1 (вниз)
Структура FPU |
Числа с плавающей запятой (IEEE 754) |
Стек FPU |
Внутренний формат FPU (10 байт) |
Команды вычислений |
Регистры FPU |
Сравнение вещественных чисел |
Флаги FPU (sw;cw), их выгрузка/загрузка |

НИУ МИЭТ, ИПОВС, КАИ |
Математический сопроцессор |
4 / 18 |
Внутренний формат FPU (10 байт)
Корректные значения
s |
|
p + |
|
1m2m3m4 : : : mn |
79 |
78 |
64 |
63 |
0 |
|
|
|
||
s |
000 : : : 000 |
|
0m2m3m4 : : : mn |
|
79 |
78 |
64 |
63 |
0 |
|
|
|
||
s |
000 : : : 000 |
|
000 : : : 0 |
|
79 |
78 |
64 |
63 |
0 |
|
|
|
||
s |
111 : : : 111 |
|
000 : : : 0 |
|
79 |
78 |
64 |
63 |
0 |
|
|
|
||
1 |
111 : : : 111 |
|
110 : : : 0 |
|
79 |
78 |
64 |
63 |
0 |
|
|
|
||
x |
111 : : : 111 |
|
11x : : : x |
|
79 |
78 |
64 |
63 |
0 |
|
|
|
|
|
x |
111 : : : 111 |
|
10x : : : x |
|
|
|
|
|
|
( 1)s 2p 0;1m2m3m4 : : : mn
pmin 6 p 6 pmax
( 1)s 2pmin |
0;0m2m3m4 : : : mn |
|
|
|
|||
( 1)s 0 |
|
|
|
|
|
|
|
( 1)s 1 |
|
|
Недопустимые значения |
||||
|
|
|
|
||||
неопределённость |
|
|
|
|
|
|
|
x |
000 : : : 000 |
|
1xx : : : x |
||||
(nan) |
|
||||||
|
|
79 |
78 |
64 |
63 |
0 |
|
тихое нечисло |
|
|
|
|
|
|
|
x |
111 : : : 111 |
|
0yy : : : y |
||||
(qnan 3 nan) |
|
||||||
79 |
78 |
64 |
63 |
0 |
|||
сигнальное нечисло |
|
|
|
|
|
|
|
x |
yyy : : : yyy |
|
0xx : : : x |
||||
(snan) |
|
||||||
|
|
|
|
|
|
|
|
9y 6= 0
9y 6= 0;
9y 6= 1
79 |
78 |
64 |
63 |
0 |
79 |
78 |
64 |
63 |
|
|
|
|
|
0 |
|
|
|
80 = 1 + 15 + 64 бита двойная расширенная |
|
2 16 382 6 jxj 6 216 383 (2 2 63) |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
Структура FPU |
Числа с плавающей запятой (IEEE 754) |
|
|
|
|||||||||
|
|
|
|
Стек FPU |
Внутренний формат FPU (10 байт) |
|
|
|
|||||||||
|
|
|
|
Команды вычислений |
Регистры FPU |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Сравнение вещественных чисел |
Флаги FPU (sw;cw), их выгрузка/загрузка |

|
НИУ МИЭТ, ИПОВС, КАИ |
Математический сопроцессор |
||||
Регистры FPU |
|
|
|
|||
st(7) |
Регистры данных r0 r7 |
|||||
Знак Порядок |
|
|
Мантисса |
|||
: : |
r0 |
|
|
|
|
|
|
|
|
|
|
||
: |
r1 |
|
|
|
|
|
(0)st |
|
|
|
|
|
|
r3 |
|
|
|
|
|
|
|
r2 |
|
|
|
|
|
FPU: |
r4 |
|
|
|
|
|
r6 |
|
|
|
|
|
|
|
r5 |
|
|
|
|
|
Стек |
r7 |
|
|
|
|
|
79 78 |
64 |
63 |
|
|||
|
|
Слово состояния sw
15
Управляющее слово cw
15
Указатель на последнюю команду fip
47
Указатель на последний операнд fdp
47
Код операции fop
5 / 18
Слово тегов tw
0
2
4
6
8
10
12
14
015
0
0
0
0
90
Структура FPU |
Числа с плавающей запятой (IEEE 754) |
Стек FPU |
Внутренний формат FPU (10 байт) |
Команды вычислений |
Регистры FPU |
Сравнение вещественных чисел |
Флаги FPU (sw;cw), их выгрузка/загрузка |

|
|
|
|
НИУ МИЭТ, ИПОВС, КАИ |
|
Математический сопроцессор |
|
|
|
|
|
|
|
6 / 18 |
|
|
||||||||||||||||||
Флаги FPU (sw;cw |
), их выгрузка/загрузка |
|
|
|
|
|||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
Слово состояния sw |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
B |
|
C3 |
|
top |
|
C2 |
C1 |
C0 |
ES |
SF |
P E |
UE |
OE |
ZE |
DE |
IE |
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
15 |
|
14 |
13 |
|
|
11 |
10 |
|
9 |
8 |
|
7 |
6 |
5 |
|
4 |
|
3 |
2 |
|
1 |
0 |
|
|
||||||||||
|
top указатель вершины стека |
|
|
|
|
C0 C3 флаги состояния |
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
SF флаг немаскируемой ошибки стека |
ES флаг незамаскированной ошибки |
||||||||||||||||||||||||||||||||
|
шесть флагов (IE:::P E 3 sw)/масок (IM:::P M 3 cw) исключительных ситуаций |
|||||||||||||||||||||||||||||||||
|
|
#I |
недействительная операция |
|
#О переполнение порядка |
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
#D денормализованный операнд |
|
#U исчезновение порядка |
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
#Z деление на ноль |
|
|
|
|
|
|
|
#Р неточный результат |
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
Управляющее слово cw |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
RC |
|
P C |
|
|
|
|
P M |
UM |
OM |
ZM |
DM |
IM |
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
15 |
|
|
|
12 |
11 |
10 |
|
9 |
|
8 |
|
7 |
6 |
5 |
|
4 |
|
3 |
2 |
|
1 |
0 |
|
|
||||||||||
|
P C поле управления точностью |
RC округлением (к ближ|чёт, к 1, к +1, к 0) |
||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
fnstcw dmem16 |
|
Выгрузка cw в память |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
fldcw smem16 |
|
Загрузка cw из памяти |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
fnstsw dest16 |
|
Выгрузка (разрушающая) sw в память или регистр ax |
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
Структура FPU |
|
Числа с плавающей запятой (IEEE 754) |
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
Стек FPU |
|
Внутренний формат FPU (10 байт) |
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
Команды вычислений |
|
Регистры FPU |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
Сравнение вещественных чисел |
|
Флаги FPU (sw;cw), их выгрузка/загрузка |