Les Secrets du 802871. CaracteristiquesLe microprocesseur 80287 est le coprocesseur mathematique du microprocesseur 80286. Il etend le nombre de registres et le jeu d'instructions du 80286. Les registres et instructions du 80287 sont specialises dans le calcul en virgule flottante, arithmetique et transcendantal. Le coprocesseur mathematique 80287 fonctionne comme un peripherique du 80286. Il repond aux adresses Entrees/Sorties 00F1H, 00F8H, 00FAH, 00FCH de facon transparente pour l'utilisateur. Caracteristiques 2. Organisation interneLe 80287 se compose de deux parties qui travaillent en partie independamment : Le BIU (Bus Interface Unit = unite d'interface bus) et le NEU (Numeric Execution Unit = unite d'execution numerique). Le 80287 ne peut pas executer plusieurs instructions a la fois. Quand une instruction de type mathematique survient, le 80286 test sa broche d'entree BUSY* et attend que le coprocesseur soit libre d'accepter cette instruction. Une fois l'instruction mathematique transmise au 80287, le 80286 continue l'execution de son programme tandis que le coprocesseur execute son instruction. L'instruction 80286 WAIT permet de synchroniser le programme 80286 avec la fin de l'execution de l'instruction du 80287 ; elle met le 80286 en etat d'attente tant que BUSY est actif ; elle est obligatoire et immediatement consecutive pour une instruction mathematique de transfert memoire (une autre instruction mathematique consecutive a le meme effet). 3. Registres internes
80286 80287
PILE etat
15 8 7 0 79 78 64 63 0 1 0
|------|------| |----|------------|------------------| |---|
AX| AH | AL | R1|SIGN| EXPOSANT | MANTISSE | | |
--------------- -------------------------------------- -----
BX| BH | BL | R2| | | | | |
--------------- -------------------------------------- -----
CX| CH | CL | R3| | | | | |
--------------- -------------------------------------- -----
DX| DH | DL | R4| | | | | |
|------|------| -------------------------------------- -----
|-------------| R5| | | | | |
SI|Source Index | -------------------------------------- -----
--------------- R6| | | | | |
DI| Dest. Index | -------------------------------------- -----
|-------------| R7| | | | | |
|-------------| -------------------------------------- -----
BP|Base Pointeur| R8| | | | | |
--------------- |----|------------|------------------| |---|
SP|Stack Point. | 15 0
--------------- |-------------|
IP|Inst. Point. | |REG. CONTROLE|
|-------------| ---------------
|-------------| | REG. D'ETAT |
CS| | ---------------
--------------- |REG. INDICAT.|
DS| | ---------------
--------------- | POINTEUR |
ES| | -- --
--------------- |D'INSTRUCTION|
SS| | ---------------
|-------------| | POINTEUR |
|-------------| -- --
FLAGS| Indicateurs | | DE DONNEES |
--------------- |-------------|
MSW| Mach. Status|
|-------------|
- Registres internes 80286/80287
Le 80287 dispose des registres suivants :8 registres de calcul organises en pile (ST(0) a ST(7))Chaque registre comporte 80 bits. Le registre courant est celui qui est pointe par le pointeur de registre (voir registre d'etat) c'est lui qui contient le premier operande de l'instruction numerique. 1 registre d'etat|---------------------------------------------------------------| | REGISTRE D'ETAT | ----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---- |b15|b14|b13|b12|b11|b10|b9 |b8 |b7 |b6 |b5 |b4 |b3 |b2 |b1 |b0 | ------------|---|------------------------------------------------ | B |C3 | ST |C2 |C1 |C0 |IR | X |PE |UE |OE |ZE |DE |IE | |---|---|-----------|---|---|---|---|---|---|---|---|---|---|---| Definition d'une exception : c'est un evenement particulier qui se produit au cours de l'execution d'une instruction numerique (concernant les registres de calculs). L'appellation "exception" n'implique pas forcement un aspect catastrophique a l'evenement. Les indicateurs suivants signalent par l'etat 1 une exception. Ces indicateurs restent a 1 tant qu'ils ne sont pas forces a zero par une des instructions destinees a cet usage. |------------|--|--|--|--|---------------| |instruction |C3|C2|C1|C0| Interpretation| ------------------------------------------ | | 0| 0| X| 0|ST(0)>srce ou 0| |FCOM, FCOMP | 0| 0| X| 1|ST(0)<srce ou 0| |FCOMPP, FTST| 1| 0| X| 0|ST(0)=srce ou 0| | | 1| 1| X| 1|non comparables| ------------------------------------------ | FPREM |Q1| 0|Q0|Q2|si resultat | | | | | | |Q2-Q0=lsb mant.| ------------------------------------------ | FXAM | 0| 0| 0| 0|non normalise>0| | | 0| 0| 0| 1|pas un nombre>0| | | 0| 0| 1| 0|non normalise<0| | | 0| 0| 1| 1|pas un nombre<0| | | 0| 1| 0| 0|normalise>0 | | | 0| 1| 0| 1|+l | | | 0| 1| 1| 0|normalise<0 | | | 0| 1| 1| 1|-l | | | 1| 0| 0| 0|0 positif | | | 1| 0| 0| 1|registre libre | | | 1| 0| 1| 0|0 negatif | | | 1| 0| 1| 1|registre libre | | | 1| 1| 0| 0|denormalise>0 | | | 1| 1| 0| 1|registre libre | | | 1| 1| 1| 0|denormalise>0 | | | 1| 1| 1| 1|registre libre | |------------|--|--|--|--|---------------| 1 registre de contrôle|---------------------------------------------------------------| | REGISTRE DE CONTROLE | ----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---- |b15|b14|b13|b12|b11|b10| b9| b8| b7| b6| b5| b4| b3| b2| b1| b0| ----|---|-----------|-------|------------------------------------ | | IC| RC | PC | M | X | PM| UM| OM| ZM| DM| IM| |-----------|-----------|-------|---|---|---|---|---|---|---|---| IC = 1 infinis signes (+infini et -infini sont distincts), ou IC = 0 infinis non signes (+infini et -infini ne sont pas distingues). Ces deux derniers formats sont presents afin de repondre aux exigences de la norme IEEE, et pour conserver une comptabilite avec certains langages de programmations. La diminution de precision n'augmente pas significativement la vitesse d'execution du 80287. Les bits du registre de controle suivants sont les masques des exceptions. Si un masque est a 1, l'exception correspondante est ignoree par le systeme de demandes d'interruptions. 1 registre indicateurs (TAGS)Il donne l'etat des registres de calcul. |---------------------------------------------------------------| | REGISTRE INDICATEURS TAGS | ----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---- |b15|b14|b13|b12|b11|b10| b9| b8| b7| b6| b5| b4| b3| b2| b1| b0| ----|-------|-------|-------|-------|-------|-------|-------|---- | TAG(7)| TAG(6)| TAG(5)| TAG(4)| TAG(3)| TAG(2)| TAG(1)| TAG(0)| |-------|-------|-------|-------|-------|-------|-------|-------| Valeurs des TAGS : 1 registre pointeur d'instruction
Mode protege Mode reel
15 0 15 12 10 0
|-------------------------| |----------------------------| |
|POINTEUR D'INSTRUCTION IP| | POINTEUR D'INSTRUCTION IP | |adresse
--------------------------- ----------|-|----------------- -instruction
| CS SELECTEUR | |P.D'I. IP|0|CODE INSTRUCTION| |
--------------------------- ----------|-|-----------------
| ADRESSE EFFECTIVE | | POINTEUR D'ADRESSE | |adresse
--------------------------- ----------|------------------- -donnee
| SELECTEUR | |P.D'ADRES| 0 | |
|-------------------------| |---------|------------------| |
1 pointeur de donnee4. Jeux d'instructionsLe 80287 opere sur sept types de donnees : |------------|-------------|---------|--------------------------------| | |Prec. en bits| Chiffres| Plage de | | FORMAT -------|-------Signifi- | calcul | | |Mantis|Exposa|catifs | (decimal) | -------------|------|------|---------|--------------------------------- | ENTIERS BINAIRES | -------------|-------------|---------|--------------------------------- |Entier court| 16 | 4-5 | -32768<Xs32767 | |Entier moyen| 32 | 9-10 | -2.10exp9<Xs2.10exp9 | |Entier long | 64 | 19-20 | -9.10exp18<Xs9.10exp18 | -------------|-------------|---------|--------------------------------- | ENTIERS DECIMAUX | -------------|-------------|---------|--------------------------------- |BCD | 72 | 18 | -99..99sXs+99..99 | -------------|-------------|---------|--------------------------------- | REELS | -------------|------|------|---------|--------------------------------- |Reel court | 24 | 8 | 6-7 | 1,2.10exp-38s|X|s3,4.10exp38 | |Reel long | 53 | 11 | 15-16 | 2,3.10exp-308s|X|s1,7.10exp308 | |Reel tempor.| 64 | 15 | 19-20 |3,4.10exp-4932s|X|s1,1.10exp4932| |------------|------|------|---------|--------------------------------| Le coprocesseur comporte 69 instructions regroupees en six types : |-|--------------------------------------------------| |1|INSTRUCTIONS DE TRANSFERT | | -------------------|-------------------------------- | |FLD,FST,FSTP,FXCH |Charg.,decharg.,echange | ---------------------|-------------------------------- |2|INSTRUCTIONS ARITHMETIQUES | | -------------------|-------------------------------- | |FADD,FSUB |Addition, soustraction | | |FMUL,FDIV |Multiplication, division | | |FSQRT,FSCALE |Racine carree,ST(0)*2ST1 | | |FPREM,FRNDINT |Reste de ST(0)/ST(1),arrondi | | |FXTRACT |Exposant | | |FABS,FCHS |Valeur absolue,change signe | ---------------------|-------------------------------- |3|INSTRUCTIONS DE COMPARAISON | | -------------------|-------------------------------- | |FCOM |Comparaison avec ST(0) | | |FCOMPP |Comparaison de ST(0) et ST(1) | | |FTST,FXAM |Compare ST(0) et 0, test ST(0) | ---------------------|-------------------------------- |4|INSTRUCTIONS DE CHARGEMENT D'UNE CONSTANTE | | -------------------|-------------------------------- | |FLDZ,FLD1,FLDPI, |0,1,c | | |FLDL2T,FLDL2E |log210,log2e | | |FLDLG2,FLDLN2 |log10e,Loge2 | ---------------------|-------------------------------- |5|INSTRUCTIONS TRANSCENDANTALES | | -------------------|-------------------------------- | |FPTAN,FPATAN |Tangente,arctangente | | |F2XM1,FYL2X |2ST(0)-1,ST(1)*log2ST(0) | | |FYL2XP1 |ST(1)*log2(ST(0)+1) | ---------------------|-------------------------------- |6|INSTRUCTIONS DE CONTROLE DU PROCESSEUR | | -------------------|-------------------------------- | |FINIT,FSETPM |Initialise,mode protege | | |FSTSWAX,FLDCW |Sauveg. et charg. mot controle | | |FSTSW,FCLEX |Sauveg. etat,efface exceptions | | |FSTENV,FLDENV |Sauveg. et charg. environnement| | |FSAVE,FRSTOR |Sauveg. et charg. generale | | |FINCSTP,FDECSTP |Incremente,decremente pile | | |FFREE,FNOP |Libere ST(i),pas d'operation | |-|------------------|-------------------------------| 5. Signaux d'entrees-sorties 80287
|------| |------|
nc -1 |-| 40-
nc -2 80287 39- CKM
nc -3 38- nc
nc -4 37- nc
D15 -5 36- PEACK*
D14 -6 35- RESET
D13 -7 34- NPCS1*
D12 -8 33- NPCS2
Vcc -9 32- CLK
Vss -10 31- CMD1
D11 -11 30- Vss
D10 -12 29- CMD0
nc -13 28- NPWR*
D9 -14 27- NPRD*
D8 -15 26- ERROR*
D7 -16 25- BUSY*
D6 -17 24- PEREQ
D5 -18 23- D0
D4 -19 22- D1
D3 -20 21- D2
|---------------|
- Brochage du 80287
6. Mise en oeuvre du 80287Le 80286 transmet automatiquement au 80287 les instructions de type ESC, si le bit MP du registre d'etat machine MSW est positionne a 1 ; dans le cas contraire, si le bit EM de ce meme registre est a 1, l'instruction peut etre emulee par le 80286 (si l'interruption INT07H est traitee). Le coprocesseur travaille en parallele avec le microprocesseur ; la
synchronisation entre les processeurs est effectuee apres decodage de
l'instruction WAIT par le 80286.
Le coprocesseur detecte 6 conditions d'exception differentes qui peuvent se
produire en cours d'execution.
Instructions 80287
octet|octet poids faible
poids| 0 1 2 3 4 5 6 7
fort -------|------|------|------|------|------|------|-------
|FADD |FMUL |FCOM |FCOMP |FSUB |FSUBR |FDIV |FDIVR |
D8|mem4r |mem4r |mem4r |mem4r |mem4r |mem4r |mem4r |mem4r |
---------------------------------------------------------
|FLD | |FST |FSTP |FLDENV|FLDCW |FSTENV|FSTCW |
D9|mem4r | |mem4r |mem4r |mem14 |mem2i |mem14 |mem21 |
---------------------------------------------------------
|FIADD |FIMUL |FICOM |FICOMP|FISUB |FISUBR|FIDIV |FIDIVR|
DA|mem4i |mem4i |mem4i |mem4i |mem4i |mem4i |mem4i |mem4i |
---------------------------------------------------------
|FILD | |FIST |FISTP | |FLD | |FSTP |
DB|mem4i | |mem4i |mem4i | |mem10r| |mem10r|
---------------------------------------------------------
|FADD |FMUL |FCOM |FCOMP |FSUB |FSUBR |FDIV |FDIVR |
DC|mem8r |mem8r |mem8r |mem8r |mem8r |mem8r |mem8r |mem8r |
---------------------------------------------------------
|FLD | |FST |FSTP |FRSTOR| |FSAVE |FSTSW |
DD|mem8r | |mem8r |mem8r |mem94 | |mem94 |mem2i |
---------------------------------------------------------
|FIADD |FIMUL |FICOM |FICOMP|FISUB |FISUBR|FIDIV |FIDIVR|
DE|mem2i |mem2i |mem2i |mem2i |mem2i |mem2i |mem2i |mem2i |
---------------------------------------------------------
|FILD | |FIST |FISTP |FBLD |FILD |FBSTP |FISTP |
DF|mem2i | |mem2i |mem2i |mem10d|mem8i |mem10d|mem8i |
------------|------|------|------|------|------|------|-------
octet|octet poids faible
poids| C0+j C8+j D0+j D8+j E0+j E8+j F0+j F8+j
fort ---------|--------|------|------|--------|--------|--------|---------
|FADD |FMUL |FCOM |FCOMP |FSUB |FSUBR |FDIV |FDIVR |
D8|ST,ST(i)|ST,ST(i)|ST(i) |ST(i) |ST,ST(i)|ST,ST(i)|ST,ST(i)|ST,ST(i)|
---------------------------------------------------------------------
|FLD |FXCH |FNOP | |groupe 1|FLDcon |groupeF0|groupeF8|
D9|ST(i) |ST(i) |(D0) | | | | | |
---------------------------------------------------------------------
| | | | | | | | |
DA| | | | | | | | |
---------------------------------------------------------------------
| | | | |Controle| | | |
DB| | | | | | | | |
---------------------------------------------------------------------
|FADD |FMUL | | |FSUB |FSUBR |FDIV |FDIVR |
DC|ST(i),ST|ST(i),ST| | |ST(i),ST|ST(i),ST|ST(i),ST|ST(i),ST|
---------------------------------------------------------------------
|FFREE | |FST |FSTP | | | | |
DD|ST(i) | |ST(i) |ST(i) | | | | |
---------------------------------------------------------------------
|FADDP |FMULP | |FCOMPP|FSUBRP |FSUBP |FDIVRP |FDIVP |
DE|ST(i),ST|ST(i),ST| |(D9) |ST(i),ST|ST(i),ST|ST(i),ST|ST(i),ST|
---------------------------------------------------------------------
| | | | |FSTSW AX| | | |
DF| | | | |(E0) | | | |
--------------|--------|------|------|--------|--------|--------|---------
|--------|------|-------|-------|-------|-------|-------|-------|-------|
|j= | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
-------------------------------------------------------------------------
|controle| | |FCLEX |FINIT |FSETPM | | | |
| | | | | | | | | |
-------------------------------------------------------------------------
|groupe 1|FCHS |FABS | | |FTST |FXAM |DIV |IDIV |
| | | | | | | | | |
-------------------------------------------------------------------------
|groupeF0|F2XM1 |FYL2X |FPTAN |FPATAN |FXTRACT|FDECSTP|FINCSTP| |
| | | | | | | | | |
-------------------------------------------------------------------------
|groupeF8|FPREM |FYL2XP1|FSQRT | |FRNDINT|FSCALE | | |
| | | | | | | | | |
|--------|------|-------|-------|-------|-------|-------|-------|-------|
Transfert de donneesCes instructions concernent principalement l'entree et la sortie des donnees dans le registre superieur ST(0) de la pile.
FLD : Chargement d'un operande dans le registre courant de la pile.
1er OCTET 2eme OCTET 3e OCT. 4e OCT.
|---------------|----------------------|------|------|
. Entier ou reel, |ESCAPE MF 1 | MOD 0 0 0 R/M | LSB | MSB |
memoire vers ST(0)|---------------|----------------------|------|------|
|---------------|----------------------|------|------|
. Entier long, |ESCAPE 1 1 1 | MOD 1 0 1 R/M | LSB | MSB |
memoire vers ST(0)|---------------|----------------------|------|------|
|---------------|----------------------|------|------|
. Reel temporaire, |ESCAPE 0 1 1 | MOD 1 0 1 R/M | LSB | MSB |
memoire vers ST(0)|---------------|----------------------|------|------|
|---------------|----------------------|------|------|
. BCD,memoire vers |ESCAPE 1 1 1 | MOD 1 0 0 R/M | LSB | MSB |
ST(0) |---------------|----------------------|------|------|
|---------------|----------------------|
. ST(i) vers ST(0) |ESCAPE 0 0 1 |1 1 0 0 0 ST(i) |
|---------------|----------------------|
FST : Stockage du registre courant
|---------------|----------------------|------|------|
. Entier ou reel, |ESCAPE MF 1 | MOD 0 1 0 R/M | LSB | MSB |
ST(0) vers memoire|---------------|----------------------|------|------|
|---------------|----------------------|
. ST(0) vers ST(i) |ESCAPE 1 0 1 |1 1 0 1 0 ST(i) |
|---------------|----------------------|
FSTP : Stockage du registre courant et incrementation du pointeur registre
courant ST(0).
|---------------|----------------------|------|------|
. Entier ou reel, |ESCAPE MF 1 | MOD 0 1 1 R/M | LSB | MSB |
ST(0) vers memoire|---------------|----------------------|------|------|
|---------------|----------------------|------|------|
. Entier long, |ESCAPE 1 1 1 | MOD 1 1 1 R/M | LSB | MSB |
ST(0) vers memoire|---------------|----------------------|------|------|
|---------------|----------------------|------|------|
. Reel temporaire, |ESCAPE 0 1 1 | MOD 1 1 1 R/M | LSB | MSB |
ST(0) vers memoire|---------------|----------------------|------|------|
|---------------|----------------------|------|------|
. BCD, ST(0) |ESCAPE 1 1 1 | MOD 1 1 0 R/M | LSB | MSB |
vers memoire |---------------|----------------------|------|------|
|---------------|----------------------|
. ST(0) vers ST(i) |ESCAPE 1 0 1 |1 1 0 1 1 ST(i) |
|---------------|----------------------|
FXCH : Echange des contenus du registre courant ST(0) avec ST(i)
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 0 0 1 ST(i) |
|---------------|----------------------|
Instructions de comparaison :
FCOM : Comparaison du contenu du registre courant ST(0) avec operande.
|---------------|----------------------|------|------|
. Entier ou reel, |ESCAPE MF 0 | MOD 0 1 0 R/M | LSB | MSB |
memoire vers ST(0)|---------------|----------------------|------|------|
|---------------|----------------------|
. ST(i) avec ST(0) |ESCAPE 0 0 0 |1 1 0 1 0 ST(i) |
|---------------|----------------------|
FCOMP : Identique a FCOM + incrementation du pointeur du registre courant.
|---------------|----------------------|------|------|
. Entier ou reel, |ESCAPE MF 0 | MOD 0 1 1 R/M | LSB | MSB |
memoire avec ST(0)|---------------|----------------------|------|------|
|---------------|----------------------|
. ST(i) avec ST(0) |ESCAPE 0 0 0 |1 1 0 1 1 ST(i) |
|---------------|----------------------|
FCOMPP : Identique a FCOM + double incrementation du pointeur du registre
courant.
|---------------|----------------------|
. ST(i) |ESCAPE 1 1 0 |1 1 0 1 1 0 0 1| = DED9H
avec ST(0) |---------------|----------------------|
FTST : Comparaison du registre courant avec .
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 0 0 1 0 0| = D9E4H
|---------------|----------------------|
FXAM : Examen des indicateurs du registre courant.
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 0 0 1 0 1| = D9E5H
|---------------|----------------------|
Instructions de chargement d'une constantes : (en format reel temporaire)
FLDZ : Chargement de 0.0 dans ST(0)
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 0 1 1 1 0| = D9EEH
|---------------|----------------------|
FLD1 : Chargement de 1.0 dans ST(0)
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 0 1 0 0 0| = D9E8H
|---------------|----------------------|
FLDPI : Chargement de PI dans ST(0)
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 0 1 0 1 1| = D9EBH
|---------------|----------------------|
FLDL2T : Chargement de log2(10) dans ST(0)
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 0 1 0 0 1| = D9E9H
|---------------|----------------------|
FLDL2E : Chargement de log2(e) dans ST(0)
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 0 1 0 1 0| = D9EAH
|---------------|----------------------|
FLDLG2 : Chargement de log10(2) dans ST(0)
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 0 1 1 0 0| = D9ECH
|---------------|----------------------|
FLDLN2 : Chargement de Loge(2) dans ST(0)
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 0 1 1 0 1| = D9EDH
|---------------|----------------------|
Fonctions arithmetiques
FADD, FADDP*, FIADD : Destination <-- (ST(0)) + operande
|---------------|----------------------|------|------|
. Entier ou reel, |ESCAPE MF 0 | MOD 0 0 0 R/M | LSB | MSB |
memoire avec ST(0) |---------------|----------------------|------|------|
|---------------|----------------------|
. ST(j) <-- |ESCAPE d P 0 |1 1 0 0 0 ST(i) |
ST(0) + ST(i) |---------------|----------------------|
FSUB, FSUBR**, FSUBP*, FSUBRP, FISUB, FISUBR **:
(destination) <-- ST(0) - (Source)
|---------------|----------------------|------|------|
. Entier ou reel, |ESCAPE MF 0 | MOD 1 0 R R/M | LSB | MSB |
memoire avec ST(0) |---------------|----------------------|------|------|
|---------------|----------------------|
. (ST(j)) <-- |ESCAPE d P 0 |1 1 1 0 R ST(i) |
(ST(i))-(ST(0)) |---------------|----------------------|
FMUL, FMULTP*, FIMUL : (destination) <-- (source) x (ST(0))
|---------------|----------------------|------|------|
. Entier ou reel, |ESCAPE MF 0 | MOD 0 0 1 R/M | LSB | MSB |
memoire avec ST(0) |---------------|----------------------|------|------|
|---------------|----------------------|
. (ST(j)) <-- |ESCAPE d P 0 |1 1 0 0 1 ST(i) |
(ST(0))x(ST(i)) |---------------|----------------------|
FDIV, FDIVR**, FDIVP*, FDIVRP* **, FIDIV, FIDIVR** :
(destination) <-- (ST(0)) / (source)
|---------------|----------------------|------|------|
. Entier ou reel, |ESCAPE MF 0 | MOD 1 1 R R/M | LSB | MSB |
memoire avec ST(0)|---------------|----------------------|------|------|
|---------------|----------------------|
. (ST(j)) <-- |ESCAPE d P 0 |1 1 1 1 R R/M |
(ST(i))/(ST(0)) |---------------|----------------------|
note : * = ST(0) est declare libre et le pointeur ST est incremente
** = les deux operandes sont inverses par rapport a l'operation.
FSQRT : ST(0) <-- racine(ST(0))
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 1 1 0 1 0| = D9FAH
|---------------|----------------------|
FSCALE : ST(0) <-- ST(0) x 2exp(partie entiere de (ST(1)))
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 1 1 1 0 1| = D9FDH
|---------------|----------------------|
FPREM : ST(0) <-- reste de ST(0)/(ST(1))
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 1 1 0 0 0| = D9F8H
|---------------|----------------------|
FRNDINT : Partie entiere : ST(0) <-- partie entiere de ST(0)
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 1 1 1 0 0| = D9FCH
|---------------|----------------------|
FXTRACT : Extraction de la mantisse et de l'exposant du registre courant :
incrementation du pointeur de pile : ST(1) contient l'exposant et ST(0) la
mantisse.
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 1 0 1 0 0| = D9F4H
|---------------|----------------------|
FABS : ST(0) <-- |ST(0)|= Valeur absolue
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 0 0 0 0 1| = D9E1H
|---------------|----------------------|
FCHS : ST(0) <-- -ST(0) : changement de signe
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 0 0 0 0 0| = D9E0H
|---------------|----------------------|
Fonctions transcendentales
FPTAN : Calcul le sinus et cosinus du registre ST(0), incrementation du
registre pointeur, sinus = ST(0) et cosinus = ST(1), la tangente est
obtenue par FDIVP ST(1), ST(0).
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 1 0 0 1 0| = D9F2H
|---------------|----------------------|
La tangente est obtenue par FDIVP ST(1), ST(0)
FPATAN : Calcul de l'arctangente, incrementation du registre pointeur ;
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 1 0 0 1 1| = D9F3H
|---------------|----------------------|
F2XM1 : ST(0) <-- 2exp(ST(0)) - 1
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 1 0 0 0 0| = D9F0H
|---------------|----------------------|
FYL2X : Calcul de ST(1) x log2 |ST(0)|
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 1 0 0 0 1| = D9F1H
|---------------|----------------------|
FYL2XP1 : Calcul de ST(1) x log2|ST(0)+1|
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 1 1 0 0 1| = D9F9H
|---------------|----------------------|
Instruction de controle du processeur
FINIT : initialisation du 80287, equivalent a RESET. Le pointeur de
registre est force a 0.
|---------------|----------------------|
|ESCAPE 0 1 1 |1 1 1 0 0 0 1 1| = DBE3H
|---------------|----------------------|
FSETPM : Passage en mode protege.
|---------------|----------------------|
|ESCAPE 0 1 1 |1 1 1 0 0 1 0 0| = DBE4H
|---------------|----------------------|
FLDCW "source" : Chargement du registre de controle depuis la memoire a
l'adresse "source".
|---------------|----------------------|------|------|
|ESCAPE 0 0 1 | MOD 1 0 1 R/M | LSB | MSB |
|---------------|----------------------|------|------|
FSTCW "destination" : Stockage du registre de controle a l'adresse
destination.
|---------------|----------------------|------|------|
|ESCAPE 0 0 1 | MOD 1 1 1 R/M | LSB | MSB |
|---------------|----------------------|------|------|
FSTSW AX : Stockage du mot de controle.
|---------------|----------------------|
|ESCAPE 1 1 1 |1 1 1 0 0 0 0 0| = DFE0H
|---------------|----------------------|
FSTSW "destination" : Stockage du registre d'etat a l'adresse
"destination".
|---------------|----------------------|------|------|
|ESCAPE 1 0 1 | MOD 1 1 1 R/M | LSB | MSB |
|---------------|----------------------|------|------|
FCLEX : RAZ de tous les indicateurs d'exceptions, l'indicateur de demande
d'interruption IR, et l'indicateur B (unite de calcul prete) : les broches
INT et BUSY du 80287 deviennent inactives.
|---------------|----------------------|
|ESCAPE 0 1 1 |1 1 1 0 0 0 1 0| = DBE2H
|---------------|----------------------|
FSTENV "destination" : Stockage des registres de controle, d'etat, de TAGs,
et du pointeur d'exceptions a l'adresse "destination".
|---------------|----------------------|------|------|
|ESCAPE 0 0 1 | MOD 1 1 0 R/M | LSB | MSB |
|---------------|----------------------|------|------|
FLDENV "source" : Restauration des registres de controle, d'etat, de TAGs,
et du pointeur d'exception depuis la memoire a l'adresse "source".
|---------------|----------------------|------|------|
|ESCAPE 0 0 1 | MOD 1 0 0 R/M | LSB | MSB |
|---------------|----------------------|------|------|
FSAVE "destination" : Stockage du contenu integral du 80287 (94 octets) a
l'adresse "destination".
|---------------|----------------------|------|------|
|ESCAPE 1 0 1 | MOD 1 1 0 R/M | LSB | MSB |
|---------------|----------------------|------|------|
FRSTOR "source" : Restauration du contenu integral du 80287 (94 octets)
depuis l'adresse "source".
|---------------|----------------------|------|------|
|ESCAPE 1 0 1 | MOD 1 0 0 R/M | LSB | MSB |
|---------------|----------------------|------|------|
b15b14 b0
|----------------------------------| |
| exposant |+ 92 |
| mantisse 48-63 |+ 90 |
| mantisse 32-47 |+ 88 - Registre ST(7)
| mantisse 16-31 |+ 86 |
| mantisse 0-15 |+ 84 |
------------------------------------ |
| |
| |
------------------------------------ |
| exposant |+ 32 |
| mantisse 48-63 |+ 30 |
| mantisse 32-47 |+ 28 - Registre ST(1)
| mantisse 16-31 |+ 26 |
| mantisse 0-15 |+ 24 |
------------------------------------
| exposant |+ 22 |
| mantisse 48-63 |+ 20 |
| mantisse 32-47 |+ 18 - Registre ST(0)
| mantisse 16-31 |+ 16 |
| mantisse 0-15 |+ 14 |
----------|------------------------- |
|OP 16-19 | 0 |+ 12 | |
----------|------------------------- -Pointeur operande |
| OP 0-15 |+ 10 | |
----------|------------------------- -Pointeur
|IP 16-19 | Code operatoire |+ 8 | |d'exception
----------|------------------------- -Pointeur instruction|
| IP 0-15 |+ 6 | |
------------------------------------ | |
| registre de TAGS |+ 4
------------------------------------
| registre d'etat |+ 2
------------------------------------
| registre de controle |Adresse physique
|----------------------------------|
FINCSTP : Incrementation du pointeur du registre courant. Pour liberer le
haut de la pile, et declarer le registre courant libre, il faut utiliser
l'instruction.
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 1 0 1 1 1| = DBE7H
|---------------|----------------------|
FDECSTP : Decrement du pointeur du registre courant.
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 1 1 0 1 1 0| = D9F6H
|---------------|----------------------|
FFREE ST(i) : Le registre ST(i) est declare libre.
|---------------|----------------------|
|ESCAPE 1 0 1 |1 1 0 0 0 ST(i) |
|---------------|----------------------|
FNOP : Pas d'operation (equivalent de FSI ST(0), ST(0)).
|---------------|----------------------|
|ESCAPE 0 0 1 |1 1 0 1 0 0 0 0| = D9D0H
|---------------|----------------------|
Notations :. mod = 00 deplacement = 0
01 deplacement 8 bits (LSB) etendu a 16 bits signe
10 deplacement 16 bits (MSB LSB)
11 adressage d'un registre ST(i)
. r/m = 000 AE = BX + SI + DEPlacement
001 AE = BX + DI + DEPlacement
010 AE = BP + SI + DEPlacement
011 AE = BP + DI + DEPlacement
100 AE = SI + DEPlacement
101 AE = DI + DEPlacement
110 AE = BP + DEPlacement
111 AE = BX + DEPlacement
. ST(i) = ix registre de la pile circulaire de calcul
. d = destination : 0 = destination ST(0)
1 = destination ST(i)
. P = incrementation pointeur : 0 = non incrementation
1 = incrementation
. R = inversion : 1 = destination vers source
0 = source vers destination
. MF (Memory Format) : 00 = reel 32 bits
01 = entier 32 bits
10 = reel 64 bits
11 = entier 16 bits
. ESCAPE = 11011
|