Information Technology | Computer architectures » Az Intel lebegőpontos processzora

Datasheet

Year, pagecount:2002, 12 page(s)

Language:Hungarian

Downloads:679

Uploaded:June 08, 2004

Size:200 KB

Institution:
-

Comments:

Attachment:-

Download in PDF:Please log in!



Comments

No comments yet. You can be the first!

Content extract

Az Intel lebegőpontos processzora (FPU) Definíció: (Floating Point Unit) Lebegőpontos processzor. A leggyakrabban előforduló műveletigényes (pl.: üzleti, 3D-s objektumok, Cad-Cam rendszerek) számításokat képes elvégezni a processzor helyett, jóval nagyobb sebességgel (célprocesszor). Miért jó az FPU? (INTEL oldaláról megközelítve) - Az Intel lebegőpontos egysége nagysebességű számítási kapacitást biztosít. - Támogatja a valós (real), az egész (integer) és a BCD-integer (4 bitenként tárol 1 számjegyet, ami 0 és 9 közötti értékeket vehet föl) adattípusokat. - Az általa megvalósított lebegőpontos számítási algoritmusokat és a kivételkezelést az IEEE 754 és 854 szabványok rögzítik. Mit / Hogyan csinál az FPU? - Utasításokat végez a processzor helyett, annak utasítás folyamából (gépi kódból), mellyel nagymértékben növeli a számítások hatékonyságát és sebességét a nagypontosságú lebegőpontos műveletek

terén. - Utasítás dekódoló: küldi a CPU-nak vagy az FPU-nak az utasításokat. Ezeket az utasításokat az Intel más néven Escape utasításoknak nevezi. - "Újabb" MMX-es vagy 3Dnow-s processzoroknál az utasításdekódolónak jelezni kell, hogy FPU-t vagy az előbbi kiterjesztéseket akarjuk használni, ez alapján tudja az utasításokat a megfelelő helyre küldeni. Fontos tudni, hogy az FPU-t is a programozó kezeli, nem magától válogat az utasítások között, hogy most ezt ő fogja végrehajtani, hanem a programozó adja ki a megfelelő utasításokat, operandusokat és paramétereket. Az FPU története Az első Intel matematikai Társ, azaz CoProcessorok 8087, 287, 387 a 8086, 286, 386-os procik társaként működtek, melyek az Intel architektúrájú processzorok numerikus kibővítéséül szolgáltak. Fontos, hogy ezek még külön tokozásban voltak magától a főprocesszortól az alaplapra integrálva. A 486 DX-es architektúrák voltak az első

olyan processzorok, ahol a társproci és a főproci egyetlen chip-re integrálódott. A Pentium procik FPU-ja is hasonló felépítésű, azonban nagyobb hatékonyságúak. Újabb utasításokkal, lebegőpontos számítási lehetőségekkel bővültek. Annak ellenére, hogy ilyen nagy fejlődésen ment keresztül az FPU, az Intel mégis megtartotta azok kompatibilitását (visszamenőleg). Pl A 486 Dx-es és Pentium Pro-s Fpuk teljesen kompatibilisek egymással (ugyanúgy, mint a CPU-k, esetleg bővítéseket tartalmaz). Elemzések az Intelnél: Az Intel minden egyes architektúránál a stabilitásra és a helyes, hibátlan számításra tette a hangsúlyt. Elemezték a használt műveletek gyakoriságát: üzleti számítások, cad rendszerek . stb A leginkább használtakét valósították meg az FPU-ban, tehát nem csak a négy alapműveletet tudja számítani. Az IEEE 754-es szabvány mutatott rá először a numerikus számítások könnyű és biztonságos használatának

szükségességére. Régebbi, és az egyes nem Intel architektúrájú FPU-k sűrűn vezettek hibás számítási eredményre: pl.: két szám szorzatát osztjuk egy harmadikkal  túlcsordulás. Ezek gyakran nem voltak felfedhetők, így az Intel kifejlesztette az FPU-ban megvalósuló kivételkezelést is (protected üzemmódban). Kivétel kezelésének lényege hogy: Hibák például (nullával való osztás, túl vagy alul csordulás . stb lásd Artúr) amelyek mindegyikéhez külön-külön kivételkezelést tud megvalósítani az fpu, tehát helytelen számításokat intelligensen tud kezelni, szól, hogy valami nem stimmel. A kivételkezelés kettős: Mindegyik hibára egyesével engedélyezni vagy tiltani lehet a kivétel generálódását, - ha tiltva van, akkor az FPU egy automatikus hibakezelést végez, így a művelet eredménye meg lesz "hibásan" (automatikusan javítottan), azonban ezt egy megfelelő bit beállításával jelöli - ha nincs letiltva, akkor

a programozó értesítést kap kivétel útján, és ő maga kezelheti le a hibát (pl debugolás). Az FPU által támogatott lebegőpontos adattípusok és formátumaik: 7 féle adattípust ismer, melyet 3 csoportba sorolhatunk: - valós (32, 64, 80 bites) o A memóriában a 3 féle valós típus a köv. képpen van tárolva:  single: 4  double: 8  extended: 10 egymást követő byte-on o Single Real: ezt a típust ma már azon programokhoz használják leginkább, amelyek valamiért a memória mérete által korlátozódnak. Debug-olásra is alkalmas, mert a kerekítési problémákat könnyebben észlelni lehet általuk. o Általános szabály, hogy az értékeket Double Real formátumban kellene tárolni. Elméletileg ez elegendő tartományt és pontosságot biztosít a programozónak o Extended Real: 80 bites: ez olyan nagypontosságú szám, amelyet általában a programok nem használnak (max double real-t 64-bitet). Az FPU minden típusú számot ilyenre

konvertál, ekkorán kezel. Természetresen lehetőség van ezen típusok mentésére-visszatöltésére a memóriába-ból, leginkább csak köztes eredmények tárolására használják. - egész (16, 32, 64 bites) - binárisan kódolt decimális egészek (80 bites). Számos valós számformátum és speciális érték kódolása lehetséges. Ezek az IEEE 754 szabványban rögzítettek. A következő osztályokba sorolhatók: • • • • • • Signed zeros (előjeles 0) Signed infinities (előjeles végtelen) o nagyon kicsi/nagy értékek esetén, az előjel még megállapítható. ez is egy lehetőség, amit ki lehet használni. Denormalized finite numbers (nem normalizált véges számok) Normalized finite numbers (normalizált véges számok) NaNs. (NemSzámok) "Not a Number" o Kétféle létezik: SNaN (Signaling), QNaN (Quite) o Debug célokat szolgál. Indefinite numbers (határozatlan számok) Egy másik probléma a task-váltás. Ha egy másik folyamatnak

adódik át a vezérlés, nem csak a CPU állapotát kell elmenteni, hanem az FPU-jét is. - erre is külön utasítások adnak lehetőséget. Az FPU felépítése Az FPU - bár ma már a processzorban helyezkedik el, azaz nem külön chipként kell a gépbe tenni, mégis - egy különálló egységet alkot a CPU-n belül, az un. Integer Unit-tal párhuzamosan működik. Az FPU és az egészekkel dolgozó egység (Integral Unit) ugyanattól az egyetlen utasítás dekódolótól kapja az utasításokat. Attól kezdve, hogy az FPU megkapta az utasítást, az integral unit-tól teljesen függetlenül hajtja azt végre. Természetesen processzortípusonként a felépítésben vannak eltérések, pl. a 486-os processzornak egy integer unit-ja és egy FPU-ja van, a Pentiumnak két integer unit-ja van, és egy FPU-ja, a Pentium-pronak pedig két integerpartja és két FPU-ja van. Az FPU részei: • • • • • • Register stack Control rigister Tag word register Instruction

pointer register Last operand register Opcode register A Register stack Az FPU-nak nyolc darab adatregisztere van. Ezeket azonban a megszokott direkt címzéstől eltérően érhetők el (címezhetők meg.) Az FPU az adatregiszter-tömbjét egy stackként kezeli, melynek a neve Register Stack A Register Stack tehát nyolc darab egyenként 80bites adatregisztert tartalmaz. Ezekben a regiszterekben a számok minden esetben extendedreal formátumban vannak tárolva, függetlenül attól, hogy milyen típusú adatot töltöttünk az adott regiszterbe. A regiszterekbe való betöltéskor ugyanis automatikus típuskonverzió történik, azaz ha az FPU által ismert adattípusok közül bármilyen típusú adatot töltünk be a Register Stack-be, akkor az minden esetben automatikusan extended-real típusúvá konvertálódik. Minthogy az adatregiszterek egy stack-ben helyezkednek el, az FPU utasításai ennek megfelelően lettek kialakítva. Mindíg létezik egy TOP elem, ami a verem

legfelső elemére mutat. A TOP elem száma a Control Word-ben van eltárolva A Register Stack-be egy load (push) művelettel kerül be elem és store (pop) művelettel kerül ki onnan. Az FPU a regisztereknek két féle elérését teszi lehetővé a programozó számára: mindígelérhető a TOP elem, illetve a TOP elemhez viszonyítva a stack más elemei. A Status Register A 16-bites Status Word az FPU állapotát írja le, és az FPU Status Regiszterében helyezkedik el. Részei az alábbi ábrán láthatók: TOP pointer, flag-ek, hiba flag-ek, stack fault flag, exception flags. Ezen regiszter értéke áttölthető memóriába vagy egy ALU regisztereibe, illetve onnan vissza az FPU-ba. A Control Word A 16bites Control Word az FPU számításainak pontosságát és kerekítési szabályait határozza meg, emellett a Control Word tartalmazza a kivételkezelô-flag-ek mask bitjeit is. A Status Regiszterhez hasonlóan a Control Regiszter értéke is menhetô a memóriába, illetve

onnan visszatölthetô. A Control Word az FPU initicalizálásakor (FINIT, FNINIT) felveszi az alapértelmezett értéket (03Fh): azaz beállítja a 64bites pontosságot, maszkolja (tiltja) az FPU összes kivételét (azaz az FPU nem generálhat egyetlen kivételt sem), illetve beállítja a kerekítést „round to nearest” (kerekítés a legközelebbi értékhez)-re. A PC bitek által meghatározott pontosság lehet 64, 53, illetve 24 bites. A PC bitek által meghatározott pontosság a következô utasításokra van hatással: FADD, FADDP, FSUB, FSUBP, FSUBR, FSUBRP, FMUL, FMULP, FDIV, FDIVP, FDIVR, FDIVRP, és FSQRT. Az RC (Rounding Control ) bitek a következô négy féle automatikus kerekítési mód egyikét állítja be, mint aktuális értéket: - “Round down”: Lefelé kerekítés - “Round up”: Felfelé kerekítés - “Round to nearest”: A legközelebbi értékre kerekít. - “Round toward zero”: A kerekített érték mindíg nagyobb, mint a precíz érték

abszolútértéke. (Truncate) - FPU Tag Word Szintén 16bites érték. Külön-külön mind a nyolc, a Register Stack-ben lévő adatregiszterhez tartalmaz egy két bites értéket, mely érték az adott adatregiszter tartalmáról hordoz információt. Ezen információ lehet: - „Valid”: érvényes, azaz az adott adatregiszter egy valamilyen valós számot tartalmaz. - Zero - Speciális: az adott adatregiszter NaN-t, végtelent, vagy denormalizált értéket tartalmaz - „Empty”: az adott adatregiszter üres. A Tag Word értéke szintén menthető, visszatölthető. Az FPU Utasítás (Instruction) és Adat (Operand) Mutatói Az FPU minden nem-contol utasítás címét és operandusának címét automatikusan elmenti egy-egy belső regiszterébe, még mielőtt végrehajtaná az adott utasítást. Mindkét regiszter 48bites mutató, egy 16bites szegmens szelektorból és egy 32bites offset-bôl áll. Ezek a mutatók a kivételkezeléshez, azaz a hibajavításhoz kellenek;

ezek alapján – illetve az ugyancsak eltárolt 11bites Last Instruction Opcode (az utolsó utasítás opkódja) alapján – lehetővé válik a kivételt (hibát) okozó utasításról információt nyerni, mely alapján a hiba korrigálása megtörténhet. Az FPU kivételkezelése Kivételeket az FPU is – a CPU-hoz hasonlóan – hiba esetén generál. A kivételek lényege egyrészt az, hogy jelezzék a hibás működést, hibás matematikai műveletet, stb., és lehetőséget adjanak a hiba kijavítására, és a program folytatására. Már láttuk a Control Word-öt, melynek segítségével a különböző esetekhez tartozó kivételek generálása engedélyezhető, illetve tiltható le. Ha egy adott kivételt letiltunk (maszkolunk), akkor az adott kivételt az FPU automatikusan lekezeli. Az automatikus kivételkezelők a leggyakrabban használt módon kezelik a kivételeket. Ha egy adott típusú kivétel generálódását engedélyezzük, akkor az esetlegesen generálódó

kivételeket le kell kezelnünk egy általunk készített kivételkezelő eljárással. Az FPU programozása Az FPU tervezésekor az Intel szem előtt tartotta a legtöbbet használt matematikai feladatokat: • Financiális számítások • Szimuláció (VEM, elektronikus áramkörök szimulációja, stb.) • Grafikai alkalmazások (még nem léteztek a 3D-gyorsítos videokártyák) • Valós idejű rendszerek, ahol fontos a megbízhatóság • CNC (koordinátarendszerek, trigonometrikus funkciók) • Robottechnika • Navigáció A 80386-os volt az utolsó olyan Intel processzor, mely nem tartalmazta beépítetten az FPU-t, de bővíteni lehetett 80387-es processzorral. A 386-os processzor automatikus támogatást nyújt a 387-es processzor kezeléséhez: az alaplapon a megfelelő foglalatba csak be kellett rakni a 80387-es coprocessort, és már működött is. Programból ellenőrizhető a coprocessor jelenléte, ettől függően az FPU használata, vagy emulációja

választható. Természetesen egy kész programnak újrafordítás nélkül futnia kell akkor is, ha jelen van FPU, és akkor is, ha nincs. Ha nincs jelen FPU, akkor emulálni kell annak működését szoftveresen Ehhez nyújtanak támogatást az FPU kivételei. A 386/387 processzorpáros úgy programozható, mintha egyetlen processzor lenne (nem kellenek pl. I/O utasítások, stb) A 387-es processzor minden regisztere a 386-os processzor regiszterei mellett, mintegy annak kiterjesztéseként jelenik meg a programozó számára. A 386os processzor utasításai között léteznek un ESCAPE utasítások, melyek mindegyikének azonos a formátuma. Ezek az ESCAPE utasítások az FPU-nak szólnak; és a "normál" programkódfolyamban vannak A memória-elérés, memóriakezelés, védelmi mechanizmusok a megszokott módon használhatók. Az FPU utasításainak operandusai minden, a CPU által használt memóriacímzési módot használhatja: (BASE + (INDEX * SCALE) +

DISPLACEMENT) (lásd a CPU ModR/M byte-ját). Az x87-es processzorok programozásának középpontjában a regiszter-stack áll. Ezt a stack-et kezelheti a programozó úgy, mint egy stack-et - mindig létezik egy TOP elem, push, pop műveletek, stb. -, vagy úgy, mintha explicit regiszterek lennének, azaz el lehet érni az egyes elemeket, igaz a TOP elemtől relatívan címezve. Az x87 minden számot a Register Stack egy-egy 80bites rekeszében tárol. Minden 16, 32, 64 bites integer számmal, 32, 64, 80 bites valós számmal, illetve 18 számjegyes (digit) BCD számmal a memória és az FPU között végzett művelet (load/save) során automatikus konverzió történik. Az FPU által támogatott adattípusok: Adattípus Bitek Száma Szignifikáns decimális számjegyek száma Intervallum (decimális) Word integer 16 4 -32,768 ó X ó +32,767 Short integer 32 9 -2*10^(9) ó X ó +210^(9) Long integer 64 18 -9*10^(18) ó X ó +910^(18) Packed decimal digits) 80 18

-99.99 ó X ó +9999 (18 Single real 3.40*10^(38) 32 6-7 1.18*10^(-38) ó ³X³ ó Double real 1.80*10^(308) 64 15-16 2.23*10^(-308) ó ³X³ ó Extended real 1.21*10^(4932) 80 19 3.30*10^(-4932) ó ³X³ ó Az x87 utasításosztályai: Utasításosztály Utasítástípusok Adatátvitel (Data Transzfer) FPU-ba betöltés, onnan való kivitel, két adat cseréje Aritmetikai Összehasonlítás Trigonometrikus Összeadás, kivonás, szorzás, osztás, gyökvonás, maradékképzés, egészrész-képzés, előjelváltás, abszolútérték, stb. Összehasonlítás, teszt (összehasonlítás nullával), vizsgálat (típus, elôjel, normalizáció) sin, cos tan, ctan Exponenciális, logaritmikus 2^(x) - 1, Y * Log{2}(X), Y Log{2}(X+1) Konstansok 0, 1, pi, Log{10}2, Log{e}2, Log{2}10, Log{2}e Process control (folyamat vezérlés) Inicializálás, Control Word mentése, visszatöltése, Status mentése, visszatöltése, kivételek törlése, stb. A regiszter stack

használata: A Status Word-ben van egy TOP elem, ami a stack-ben a legfelső elem indexét tartalmazza. Az FPU regiszterei tehát stack-ként kezelhetők, push, pop műveletek segítségével lehet elemeket betenni a stack-be, illetve kivenni a stack-ből. A stack tetején lévő, a TOP által indexelt elemet ST-vel, vagy ST(0)-val érhetjük el. Más regisztereket a TOP elemtől relatívan tudjuk megcímezni: ST(x), ahol x eleme [0.7] Pl két szám összeadása: FADD ST, ST(2). A register-stack használatának különösen akkor van jelentősége, amikor paramétereket adunk át eljárások között. Egyszerűbb stack-et használni, mint meghatározni konkrét elemeket (ugyanúgy, mint normál paraméterek átadásakor). Persze paraméterek átadását az stack mérete (nyolc elem) jelentôsen korlátozza. A status word, ami az FPU teljes status-át tartalmazza lementhető a memóriába, illetve onan visszatölthető az FSTSW/FNSTSW, FSTENV/FNSTENV, illetve FSAVE/FNSAVE

utasításokkal, illetve az AX regiszterbe tölthető, onnan visszatölthető FSTSW AX/FNSTSW AX utasításokkal. Az FSTSW AX regiszter szerepe kiemelt; segítségével a Stsus Word-öt az AX regiszterbe lehet másolni, majd a SAHF utasítással az AX regiszterből áttölthetők a az FPU flag-jei a processzor FLAGS regiszterébe. Ezután használhatók a jxx jump utasítások (branch) A Pentium Pro megjelenésével az előbb leírt eljárás mellett, az FPU utasításkészletének kibővítésével lehetővé vált a feltételes elágazások szervezésének egy egyszerűbb módja is: az FCOMI, FCOMIP, FUCOMI és FUCOMIP utasítások már közvetlenül a CPU flag regiszterét módosítják. Az FPU utasítások opkódjai természetesen kötött hosszúságúak, azonban az assembler fordítók a különböző utasítások több formájú (operandusszámú) megadási módját is megengedik. Egy tipikus FPU utasítás egy vagy két operandust használ, elvégez valamilyen műveletet, majd

az eredményt a kimeneten eltárolja. Egy operandus tipikusan vagy egy regiszter értéke, vagy egy adott memóriacímen tárolt változó. Egyes utasítások mindig kizárólag meghatározott számú operandussal használhatók (pl. az FSQRT utasítás mindig egy operandust használ: négyzetgyököt von a stack TOP eleméből), míg más utasítások esetében a programozóra van bízva, hogy hány operandust ír ki. Más utasítások esetében maximum egy operandust használhatunk: ha nem írunk ki operandust, akkor a stack TOP értékétvel, azaz az st(0) operandussal kiegészíti a fordító az utasítást. Adatátviteli műveletek, utasítások (Data Transfer) Funkciójuk: adatátvitel o a regiszter stack elemei között o a regiszter stack TOP eleme és a memória között Az FPU által támogatott hét adattípus közül bármelyik egyetlen lépésben betölthető a regiszter stack-be, az extended real típusra történő konverzió automatikus. Ugyanez igaz a regiszter

stack felől a memória felé is. (Az adatátviteli utasítások automatikusan megváltoztatják a tag word-ot.) - - - Real Transfers FLD FST FSTP FXCH Integer Transfers FILD FIST FISTP Packed Decimal Transfers FBLD FBSTP Load Real Store real Store real and pop Exchange registers Integer load Integer store Integer store and pop Packed decimal (BCD) load Packed decimal (BCD) store and pop Egy-két utasítást bemutatunk példaként: FLD source: real típusú bemenetet tölt be a regiszter stack tetejére; a bemenet (source) lehet egy memóriacímen elhelyezkedő bármely real típus, vagy lehet a regiszter stack bármely eleme. Az ST(7)-nek üresnek kell lennie, különben kivételt generál az FPU FST destination: a kimenet (destination) szintén vagy egy regiszter stack elem, vagy egy memóriacím. A konverzió automatikus, a kerekítés a control word RC mezője alapján történik Adattípusok definiálása TASM-ban: Direktíva Adattípusok DW Word integer DD Short integer,

short real DQ Long integer, long real DT Packed decimal, temporary real Numerikus operandusok A különböző utasítások operandusait – ha ki vannak írva a programozó által, ha nincsenek – két csoportra lehet osztani: bemenetre (source) és kimenetre (destination). A bemenő operandust az utasítások soha nem változtatják meg; amikor típuskonverzióra van szükség, akkor az is természetesen belsőleg történik biztosítva ezzel a bemenő operandus változatlanságát. A kimeneti operandus szolgálhat bemenetként is az utasítás számára, ekkor ez az operandus egyben a bemenet, illetve a kimenet is. Egy példa az előzőekre az FADD utasítás, melyet három formában lehet megadni: - FADD : ST(1) = ST(1) + ST, pop ST - FADD source FADD destination, source : ST(0) = ST(0) + source : source = source + destination Numerikus utasítások Egyes utasításoknak - ilyen pl. az FADD, FSUB – több változata létezik Pl az FSUB valós számokon végzett műveletinek

változatai: FSUB, FSUBP, FSUBR, FSUBRP. Mit jelent a P, és az R beüt? A P beüt POP-ot jelent, azaz, mikor a műveletet – jelen esetben kivonást – a processzor elvégezte, rögtön utána végrehajt egy pop-ot is, azaz kiveszi a TOP elemet a regiszter stack-bôl. Mire jó ez? Miért tették bele az utasítások közé ezt az utasítást? Egyszerűen abból a meggondolásból, hogy a műveletvégzés-és-pop páros az regiszter stack használatakor igen gyakran használatos. Vegyünk egy nagyon egyszerű példát: ki akarjuk számolni két szám különbségének a négyzetgyökét. Miután elvégeztük a kivonást, már csak az eredményre van szükségünk, hiszen ebből fogunk gyököt vonni. Az R betű a REVERSED szó kezdőbetűje, csak a kivonás és az osztás utasításai rendelkeznek reversed változattal, ezek szimmetrikussá teszik ezen utasításokat, azaz megcserélik a bemenő source és destination párost. A kimenet természetesen mindig a destination. Pl FSUB:

destination = source – destination, míg az FSUBR: destination = destination – source. - - - Egyszerű matematikai műveletek: o Alapműveletek  FADD  FSUB  FMUL  FDIV o Egyéb műveletek  FSQRT : Négyzetgyök (Square root)  FSCALE : ST = ST * 2^(ST(1))  FPREM : Partial Remainder: ST = az ST / ST(1) maradéka  FRNDINT : Kerekítés (Round to integer)  FABS : Abszolút érték  FCHS : Elôjelváltás (Change sign) Trigonometrikus műveletek  FSIN  FCOS  FSINCOS : ST = SIN(ST) és push COS(ST)  FPTAN  FPATAN Egyéb összetett műveletek  F2XM1 : 2^(X-1)  FYL2X : Y * log2(X)  FYL2XP1 : Y * log2(X+1) Konstansok - FLDZ - FLD1 - FLDPI - FLDL2T - FLDL2E - FLDLG2 - FLDLN2 : push 0.0 : push 1.0 : push pi : push log2(10) : push log2(e) : push log10(2) : push log(e)2 Összehasonlító utasítások - FCOM, FCOMP, FCOMPP, FICOM, FICOMP, FUCOM, FUCOMP, FUCOMPP - FTST - FXAM (examine): a TOP elemről információt ad vissza: előjel,

NaN, denormalizált, normalizált, nulla, végtelen, üres, vagy unsupported (nem támogatott). Processzor Control Utasítások A számításokban nem vesznek részt, hanem egyéb feladatokat látnak el: - Inicializáció o FINIT/FNINIT - Feltételes elágazás (Conditional branching) o FSTSW/FNSTSW - Kivételkezelés (Exception handling) o FCLEX/FNCLEX : Clear exceptions - Taszkváltás (Task switching) o FSTENV/FNSTENV : Store environment o FLDENV : Load environment o FSAVE/FNSAVE : Save state o FRSTOR : Restore state o FSTCW/FNSTCW : Store control word - Egyéb o FINCSTP : Increment stack pointer o FDECSTP : Decrement stack pointer o FFREE : Free register o FWAIT : CPU wait o FNOP : No operation Forrás: Készítette: Kapsza Gergő Czinder András Pál Artúr NMIT III/13. 2002. április 11 http://developer.intelcom/