Online: 0x034 (52)
haker.info  — Etyczny hacking_
Spreading knowledge like a virus.

 haker.info Baza wiedzy

Asembler x86/x64 » Rejestry procesora
Rejestry koprocesora (FPU/x87)

Nazwa koprocesor pochodzi z dawnych czas贸w i oznacza osobny element wspomagaj膮cy procesor w obliczeniach. W tym rozdziale przedstawiono rejestry koprocesora arytmetycznego nazywanego te偶 jednostk膮 zmiennoprzecinkow膮 (ang. floating-point unit, FPU) czy kr贸tko x87. Mimo, 偶e okre艣lenie koprocesor pozosta艂o, to aktualnie jest on zawarty w uk艂adzie procesora, a nie oddzielnie.

Koprocesor arytmetyczny powsta艂, aby przeprowadza膰 obliczenia na liczbach z wi臋ksz膮 dok艂adno艣ci膮.

G艂贸wne typy danych u偶ywane przy operacjach zmiennoprzecinkowych to:

  • Warto艣膰 pojedynczej precyzji o rozmiarze 32 bit贸w,
  • Warto艣膰 podw贸jnej precyzji o rozmiarze 64 bit贸w,
  • Warto艣膰 o rozszerzonej precyzji o rozmiarze 80 bit贸w.

Rejestry koprocesora x87 zachowuj膮 si臋 jak stos. Korzystaj膮c z jego instrukcji mo偶liwe jest wykonywanie oblicze艅 relatywnie od wierzcho艂ka stosu, ale nic nie stoi na przeszkodzie, aby odwo艂ywa膰 si臋 do poszczeg贸lnych rejestr贸w indywidualnie (po nazwie np. st0, st1, st2, ..., st7).

fpu stack registers

Przy opisywaniu koprocesora x87 warto wspomnie膰 o rejestrze statusu nazywanym FPU Status Word. To w nim s膮 informacje o aktualnym stanie jednostki zmiennoprzecinkowej. Bity od 13 do 11 w tym rejestrze wskazuj膮 na wierzcho艂ek stosu okre艣lany jako TOP. Jak wcze艣niej wspomniano rejestry FPU s膮 w formie stosu. Bity okre艣lane jako TOP zawieraj膮 fizyczny indeks wierzcho艂ka stosu rejestr贸w.

Opr贸cz TOP wspomn臋 te偶 o bitach C0...C3. Ot贸偶 s膮 one ustawiane przez rozkazy por贸wnania warto艣ci. Pozosta艂e znaczniki (IE, DE, ZE etc.) dotycz膮 wyj膮tk贸w (ang. exceptions).

fpu status word

Opr贸cz rejestru statusu istnieje te偶 rejestr kontroli jednostki zmiennoprzecinkowej. Znacznik PC w tym rejestrze okre艣la dok艂adno艣膰:

  • 00b 鈥 pojedyncza precyzja (24 bity),
  • 01b 鈥 zarezerwowane,
  • 10b 鈥 podw贸jna precyzja (53 bity)
  • 11b 鈥 rozszerzona podw贸jna precyzja (64 bity).

Natomiast RC dotyczy zaokr膮glania, a jego mo偶liwe warto艣ci to:

  • 00b 鈥 zaokr膮glanie do najbli偶szej warto艣ci lub warto艣ci parzystej w przypadku r贸wnej odleg艂o艣ci,
  • 01b 鈥 zaokr膮glanie w d贸艂,
  • 10b 鈥 zaokr膮glanie w g贸r臋,
  • 11b 鈥 zaokr膮glanie w kierunku zera.

Pozosta艂e znaczniki to maski wyj膮tk贸w. Okre艣laj膮 one czy ma zosta膰 rzucony wyj膮tek danego rodzaju. Wyj膮tki s膮 domy艣lnie wyciszone (maskowane). Mo偶emy zatem ustawi膰, kt贸re wyj膮tki chcemy aktywowa膰.

fpu control word

Dawid Farbaniec

Wykaz literatury (bibliografia)

  • Advanced Micro Devices Inc., 2017 鈥 AMD64 Architecture Programmer's Manual
  • Intel Corporation, 2019 鈥 Intel 64 and IA-32 Architectures Software Developer's Manual
  • Randall Hyde, 2010 鈥 Asembler. Sztuka programowania. Wydanie II, ISBN: 9788324628544
Wszystkie tre艣ci umieszczone na tej witrynie s膮 chronione prawem autorskim. Surowo zabronione jest kopiowanie i rozpowszechnianie zawarto艣ci tej witryny bez zgody autora. Wszelkie opublikowane tutaj tre艣ci (w tym kody 藕r贸d艂owe i inne) s艂u偶膮 wy艂膮cznie celom informacyjnym oraz edukacyjnym. W艂a艣ciciele tej witryny nie ponosz膮 odpowiedzialno艣ci za ewentualne niezgodne z prawem wykorzystanie zasob贸w dost臋pnych w witrynie. U偶ytkownik tej witryny o艣wiadcza, 偶e z zamieszczonych tutaj danych korzysta na w艂asn膮 odpowiedzialno艣膰. Wszelkie znaki towarowe i nazwy zastrze偶one zosta艂y u偶yte jedynie w celach informacyjnych i nale偶膮 wy艂膮cznie do ich prawnych w艂a艣cicieli. Korzystaj膮c z zasob贸w witryny haker.info o艣wiadczasz, 偶e akceptujesz powy偶sze warunki oraz polityk臋 prywatno艣ci.