FPU - operacje na liczbach zmiennoprzecinkowych
Liczby zmiennoprzecinkowe

Hardware
Rejestry FPU
Umieszczanie danych na stosie

Wszystkie instrukcje FPU poprzedzone są przedrostkiem F.

Odczyt ze stosu

Instrukcje które zdejmują wartość ze stosu mają przyrostek P, jeżeli zdejmują dwie wartości to PP

Działania arytmetyczne

Wynik działań jest zawsze umieszczany w jednym z rejestrów.

Przykład
Plik asemblerowy Plik C

Funkcje
FPU Control Word

FPU control word pozwala na zmianę ustawień FPU

FPU Status Word

FPU status word zawiera aktualny stan FPU:

Instrukcje kontrolne
Komendy porównania

FPU oprócz rejestrów danych zawiera także rejestr kontrolny (16 bitów) i rejestr stanu (16 bitów).
W rejestrze stanu są 4 bity nazwane C0, C1, C2 i C3. To one wskazują wynik ostatniego porównania, a układ ich jest taki sam, jak flag procesora, co pozwala na ich szybkie przeniesienie do flag procesora.

Aby odczytać wynik porównania, należy przenieść rejestr flag z koprocesora do procesora:

fcom       ;  porównujemy
fstsw ax   ;  kopiujemy rejestr flag koprocesora do ax 
sahf       ;  AH zapisane do flag

Następnie możemy używać rozkazów skoków tak jak dla liczb całkowitych bez znaku: JE, JB itp.

Komendy kończące się na I lub IP zapisują swój wynik bezpośrednio do flag procesora. Można tych flag od razu używać (JZ, JA, ...). Te komendy są dostępne od Pentium Pro.

FTST porównuje st(0) z zerem.

Typ liczby

FXAM bada, co jest w st(0) - prawidłowa liczba, błąd (NaN = Not a Number), czy 0.

Rodzaj liczby C3 C2 C0
Błędna liczba 0 0 0
NaN 0 0 1
Zwykła liczba skończona 0 1 0
Nieskończoność 0 1 1
Zero 1 0 0
Pusty rejestr 1 0 1
Liczba zdenormalizowana 1 1 0

Rejest C1 zawiera znak liczby w ST0

Przykład: trójmian kwadratowy

Kod asemblerowy
Kod C


Tomasz Kapela, Kraków 2011-2020