Sunteți pe pagina 1din 19

12.

UTILIZAREA COPROCESORULUI MATEMATIC


12.1 Arhitectura coprocesorului 8x87
Coprocesoarele 8x87/80287/80387, corespunzatoare celor trei game ale
microprocesoarelor IN!" 80x8#, sint mo$ule procesor specializate pentru calcule
matematice, care lucreaza cu numere reprezentate in %irgula &lotanta '()*. +icroprocesoarele
80,8# -i .entium au integrat in ele si mo$ulul $e() 80387 alaturi $e un mo$ulul /inar 8038#.
Coprocesorul asigura cresterea considerabila a vitezei de eec!tie a o"eratiilor
arit#etice$ calc!l!l %!nctiilor tri&ono#etrice sa! lo&arit#ice si o crestere a "reciziei de
calc!l 'n!#ar!l de ci%re se#ni%icative*. !l este o extin$ere a resurselor procesorului $e /aza
80x8#, ca registre si set $e instructiuni, &olosin$ in comun memoria centrala. Cele do!a
"rocesoare "ot l!cra in "aralel, programul putin$ contine atit instructiuni $e /aza cit si in
(). .entru sincronizarea lor in program se %a &olosi instructiunea )0AI,inaintea
instructiunilor 8x8#, care &olosesc $ate rezultate in memorie $in prelucrari in 8x87.
+nemonicele coprocesorului incep cu litera ) ')"1,)A11,..*.

+ ! + 2 3 I ! C ! N 3 A " A
.rograme 8x8#/87
1ate 8x8#/87
.32C!423
8 x8 #
.32C!423 ()
8 x 8 7
Cele $oua procesoare %olosesc aceleasi #a&istrale de date si adresa '564*.
Co"rocesor!l n! are #ecanis# "ro"ri! de calc!l al adreselor 'segment,/aza,in$ex*, acest
calcul se &ace in 8x8#, care7i &urnizeaza a$resa instructiunii curente 'I.7instr.pointer* si a$resa
operan$ului '2.7operan$ pointer* in &orma reala. 4unt a$mise toate mo$urile $e a$resare, $ar
adresa se calc!leaz( )n "rocesor!l de baz( **+.
Co"rocesor!l **, n! are instr!c-i!ni "ro"ri de salt.
.azele eec!tiei unei instructiuni 8x87 sint8
7 Citire instructiune $e catre 8x8#
7 Calcul a$resa operan$ in 8x8#
7 Comunicare a$resa operan$ si co$ instructiune spre 8x87
7 !xecutie instructiune () in 8x87 si memorare rezultat
7 Anuntare procesor 8x8# ca s7a terminat executia
Instructiunile $e () sint recunoscute $upa primii 9 /iti $in co$ul operatiei, care sint
aceeasi 11011 si se numesc !4CA.!. Cin$ lucreaza coprocesorul pune /US011 'primul /it
$in status :or$*, pentru a putea &i testat $e procesorul 8x8# in 2AIT.
1
Co"rocesor!l **, contine8
7 6nitatea $e coman$a si control a trans&erurilor $e in&ormatii
7 6nitatea $e executie a instructinilor in %irgula &lotanta 7 3egistre generale $e () organizate
ca sti%a 4'0*,4'1*,..4'7*
3egistrele si caile interne ale coprocesorului () sint $e mare %iteza si 80 /iti '17
semn,197exponent,#,7mantisa*.
Unitatea de co#anda si control contine 9 registre '1, octeti*, care pastreaza starea
momentana a lui 8x87 '!N(I32N+!N*. !le pot &i memorate la a$rese consecuti%e prin
)4!N( 'store en%ironment* si ulterior incarcate prin )"1!N( 'loa$ en%ironment*.

19 0
;0 C O 3 T R O L 2 O R 4 7precizie,masti $e intrerupere
;2 S T A T U S 2 O R 4 7 in$icatori,stare si intrerupere
;, T A 5 2 O R 4 7 in$icatori reg
;#
;8
I 3 S T R U C T I O 3
P O I 3 T E R
7 a$resa reala,
co$ instructiune curenta
;10
;12
O P E R A 3 4
P O I 3 T E R
7 a$resa reala
operan$
4tarea completa a coprocesorului cuprin$e si cele 8 registre generale 'sti%a* $e 10
octeti &iecare '1,;8<10=>, octeti*,se poate memora prin )4A(! si restaura prin
)3423!.4al%area registrelor se &ace cu octetii mai putin semni&icati%i in &ata si in or$inea
4'0*,4'1*,....4'7*, $upa registrele !N(I32N+!N.
Re&istr!l I3STRUCTIO3 POI3TER pastreaza pe 20 /iti a$resa reala si co$ul
instructiunii curente ' &ara primii 9 /iti 11011*.
19 0
I3STRUCTIO3 POI3TER 6lo7 'bitii 1869:
IP 6;i&; < 9 < OPERATIO3 CO4E
19 12 10 0

Re&istr!l OPERA34 POI3TER contine pe 20 /iti a$resa reala 'calculata $e 8x8#* a
operan$ului $in memorie utilizat in instructiunea curenta.
19 0
OPERA34 POI3TER 6lo7 adress 'bitii 1869:
OP ;i&; < 9 9 9
19 12 0


Re&istrele &enerale organizate ca sti%a circulara are &iecare 80 /iti,pentru precizie
maxima '17semn,197exponent, #,7 mantisa sau ?signi&ican$?*. oate $atele primite $in
memorie se con%ertesc si se pastreaza in () &ormat lung 'temporar@*.1in memorie se pot
incarca numere intregi /inare,numere in zecimal co$i&icat /inar '5C1* $e 18 ci&re si numere
co$i&icate in (). Con%ersiile necesare se &ac la citirea sau scrierea in memorie utilizin$
instructiuni speci&ice.
2
19 /iAi #, /iAi
S E=PO3E3T M A 3 T I S A
R9 ST'+:
R1 ST',:
R2 ST'9: >66TOP12
R? ST'1:
ST'2:
R, ST'8:
7> #3 0
"a un moment $at oricare registru poate &i %ir&ul sti%ei 4'0*, iar urmatorul
4'1*.Celelalte registre %or a%ea o a$resa relati%a &ata $e 4'0*. Numarul registrului %ir& $e
sti%a se gaseste memorat in zona 2. $in 4A64 0231. O"eratiile de incarcare
decre#enteaza TOP c! 1 si incarca in no!l re&istr! ST'9:. 2peratiile $e memorare cu
?pop? memoreaza $in 4'0* si incrementeaza 2. cu 1.
Re&istr!l STATUS 2OR4 contine8
7 in$icatorii $e con$itii, pozitionati $upa e&ectuarea instructiilor $e comparatie/test, care se
pot memora cu )440 'store status :or$* pentru a &i analizate $e 8x8#, cin$ tre/uie sa se
&aca salturi con$itionate '8x87 nu are instructiuni $e salt*.
7 /itii care in$ica aparitia unor cereri intreruperi spre 8x8#, sau $atorate rezultatelor o/tinute
7 in$icatorul registrului %ir& $e sti%a 2.
19 1, 13 10 > 8 7 # 9 , 3 2 1 0
/ C? TOP C2 C1 C9 IR P U O Z 4 I
/ =1 7 coprocesor 8x87 ocupat
C?66C9 7 in$ica rezultatul unei comparatii sau test
C0 =1 7 4'0* B sursa 'echi%alent cu 4 la 8x8#*
C3 =1 7 4'0* C sursa 'echi%alent cu D la 8x8#*
TOP =0...7 7 in$ica nr. registru %ir& $e sti%a
IR =1 7 cerere intrerupere la 8x8# 'intrerupt reEuest*
P U O Z 4 I 7 in$icatori intreruperi $atorate rezultatului
. =1 7 precision 7s7a pier$ut un /it si rezultatul rotunFit
6 =1 7 un$er&lo: 7exponent prea mic '$epasire in&erioara*
0 =1 7 o%er&lo: 7 prea mare '$epasire superioara*
D =1 7 zero $i%i$e 7 impartire numar G 0 cu zero
1 =1 7 $enormalize$ 7 numar nenormalizat
I =1 7 in%ali$ operation 7 0/0, in&init/in&init,nenumeric
Intreruperea se poate anula cu )C"!H 'clear 8x87*.
Re&istr!l CO3TROL 2OR4 contine in$icatori $e sta/ilire precizie si masti $e intrerupere8
19 12 11 > 7 9 , 3 2 1 0
rezervat IC R C P C IEM PM UM OM ZM 4M IM
IC 6 In%init Control 0 7 nu &ace $istinctie intre ; si 7 in&init
1 7 &ace $istinctie intre ; si 7 in&init
RC 6 Ro!ndin& Control 7 sta/ileste mo$ul $e rotunFire
3
00 7 rotunFire la cel mai apropiat ' implicit *
01 7 rotunFire in sus
10 7 rotunFire in Fos
11 7 trunchiere
PC 6 Precizion Control 7 precizie $e lucru prescrisa'rotunFire*
00 7 2, /iti pentru mantisa 7 short real
01 7 rezer%at
10 7 93 /iti 7 long real
11 7 #, /iti 7 temporar@ real ' implicit *
IEM 6 Intrer!"t Enable Mas@ 7 implicit = 1 'mascate*
0 7 intreruperile nemascate,tratate prin proce$ura utilizator
1 7 toate intreruperile sint tratate stan$ar$ $e 8x87
7 rezer%at '/it #*
Mastile s"eci%ice intrer!"erilor pot a%ea %alorile8
0 7 intrerupere exceptie tratata prin proce$ura utilizator
1 7 intreruperea exceptie este mascata 'implicit*
3aspunsurile la &iecare exceptie mascata 'masca = 1*sint8
PM 7 .recision +asI 7 &urnizeaza rezultatul rotunFit
UM 7 6n$er&lo: +asI 7 rezultat = 0
OM 7 2%er&lo: +asI 7 rezultat = numar maxim cu semn
ZM 7 Dero $i%i$e +asI 7rezultat = numar maxim cu semn
4M 7 1enormalize$ 7 continua calculul cu nr.nenormalizat
IM 7 In%ali$ operation +asI 7 rezultatul este %aloarea nenumerica a operan$ului
'ex8 ra$ical $in numar negati%*
Re&istr!l TA5 2OR4 contine 8 grupe $e 2 /iti numite AJ'0*, AJ'1*,...AJ'7*
corespunzatoare celor 8 registre generale 4'0*, 4'1*,....4'7*. )iecare AJ'I* in$ica
continutul lui 4'I* 8
AJ'I* = 00 7 %aloare %ali$a in 4'I* normalizata sau nu
01 7 zero in 4'I*
10 7 continut special nenumeric,; sau 7 in&init,anormal
11 7 %aloare zero $e initializare
12.2 ipuri $e $ate
4int a$mise 7 tipuri $e $ate, care pot &i operanzi $in memorie si care prin incarcare se
con%ertesc in &ormat intern (irgula )lotanta '()* pe 80 /iti numit emporar@ 3eal.In
registrele interne se pastreaza $atele numai in &ormat () $e un$e se pot memora in alte
&ormate prin instructiuni speci&ice, care asigura si con%ersia. 4peci&icarea a$resei operan$ului
se poate &ace in toate mo$urile a$mise $e 8x8#, care asigura calcularea a$resei. In toate
tipurile primul /it este consi$erat semn, iar /itii $in stinga sint cei mai semni&icati%i.
Caracteristicile tipurilor a$mise sint $ate in ta/elul urmator8
ip $ate 5iti Ci&re zec. .recizie !xponent<
2OR4 I3TE5ER 1+ A68 1+ biti n!
,
SBORT I3TE5ER ?2 C ?2 biti n!
LO35 I3TE5ER +A 1* +A biti n!
PACDE4 4ECIMAL *9 1* 1* ci%.zec n!
SBORT REAL ?2 +6, 2A biti 12, '*:
LO35 REAL +A 1861+ 8? biti 192? '11:
TEMPORAR0
REAL
*9 1C629 +A biti 1+?*? '18:
<!xponentul este utilizat ca putere a lui 2, iar in paranteza se $a puterea
corespunzatoare a lui 10 pentru $omeniul maxim.
In real #antisa este "ozitiva si da "recizia$ iar se#n!l este al #antisei '4 = 1
negati%*. 5itii $e exponent $au caracteristica 'CA3*, care este poziti%a. (aloarea exponentului
'!H.* se calculeaza8
E=P 1 CAR 6 ,.B 7 pentru 4K23 3!A"
7 3))K 7 pentru "2NJ 3!A"
7 3)))K 7 pentru !+.23A3L 3!A"
(aloarea unui numar real 7 N 'reprezentat in %irgula &lotanta* se calculeaza $upa &ormula8
3 1 ME2EEE=P un$e8 + 7 este %aloarea mantisei 1 > M > 2
!H. 7 %aloare calculata exponent
Ti"!rile intre&i cu semn sint cele acceptate $e procesorul 8x8# si $e +acroasam/lor
prin $irecti%ele $e $e&inire $ate8
42 7 $e&ine :or$ 7 pentru 0231 IN!J!3 ' 1# /iti *
44 7 $e&ine $ou/le7:or$ 7 pt. 4K23 IN!J!3 ' 32 /iti *
4F 7 $e&ine Eua$7:or$ 7 pt. "2NJ IN!J!3 ' #, /iti *
Ti"!l PACDE4 4ECIMAL utilizeaza 10 octeti si este un numar zecimal co$i&icat
/inar cu semn '5C1*, a%in$ 18 ci&re zecimale, co$i&icate &iecare pe , /iti '$oua pe octet*.
.rimul octet contine $oar semnul pe primul /it.
7> 71 #3 9# .......... 19 7 0
S E 41,41+ 41841A 41? .......... 4A 4?42 4149
ipul este recunoscut $e macroasam/lor prin $e&initia8
4T 7$e&ine ten7/@te in care %aloarea se speci&ica in hexa
Ti"!rile reale sint numere co$i&icate in %irgula &lotanta
un$e reprezentarea se &ace prin mantisa poziti%a 'signi&icant*, caracteristica si semn. +antisa se
trece intot$eauna intr7o &orma normalizata 1 B + B 2 $e &orma8
1G%%%%%%%% un$e8 M 7 este punctul zecimal %irtual
& 7 sint /iti &ractionari '23, 92 sau #3*
5itul intreg este implicit $ar nu exista in memorie pentru &ormatul 4K23 si "2NJ, el
existin$ &izic numai la !+.23A3L 3!A".
SBORT REAL
31 30 22 0
S E, ..
.
EO %1 %2 .... %22 %2? 7 in #antisa 1 este i#"licit
7 E=P > 12, '7)K*
e"onent #antisa 6 #antisa +6, ci%re zeci#ale

9
LO35 REAL
#3 #2 91 0
S E19 E9 %1 %2 %? ....... %81 %82 E=P > 192? '?..B:
6 #antisa 1861+ ci%re zec.

TEMPORAR0 REAL
7> 78 #3 0
S E1A.... E1 E9 1G%1 %2 %? %1A ...... %+2 %+?
E=P > 1+?*? '?...B: 6 #antisa 1C629 ci%re zeci#ale
12.3 Asam/larea programelor
.entru generare $e co$ pentru coprocesor +acroasam/lorul se poate lansa in $oua
mo$uri
+A4+ ...... /3 7 genereaza co$ real executa/il pe 8x87 existent
/! 7 emulare 7 genereaza chemari $e su/programe $in /i/lioteca pentru
mnemonice 8x87 intilnite
Co$urile instructiunilor 8x87 generate in mo$ul /3 pot &i executate &ara a exista &izic
coprocesorul $aca se lanseaza inainte 8
!+87 /"
Acesta incarca un emulator 8x87 rezi$ent in memorie, care se apeleaza prin intreruperile $e
exceptie instructiune inexistenta, $eclansate $e co$urile 8x87 $in program. "a terminarea
programelor care utilizeaza mnemonici 8x87 emulatorul se elimina prin8
!+87 /6 7 $escarcare emulator 8x87 $in memorie
.entru ca macroasam/lorul sa recunoasca mnemonicele 8087 in program, tre/uie
inainte sa se $ea coman$a8
.8087
1aca se utilizeaza alte coprocesoare se %or $a comenzile8
.287 7 pentru 80287
.387 7 $aca se utilizeaza 80387 sau procesorul 80,8#
.entru speci&icarea setului $e instructiuni se utilizeaza8
.28#C 7 set comun nepri%ilegiat 8028#
.28#. 7 set pri%ilegiat 8028#
.38# 7 set instructiuni 8038#
.entru testarea programelor care utilizeaza coprocesorul, $epanatorul A)1 nu poate &i
&olosit, $eoarece nu recunoaste setul $e instructiuni al coprocesorului si se recoman$a
C21(6!.
O/SERHATIE In macroasam/lor n! eista de%initii de ti"!ri speciale $e $ate
pentru coprocesorul 8x87, ele &iin$ recunoscute prin lungimea $e&inita $e instructiunile $e ()
ce le utilizeaza8
H1 $: ,930 7 intreg pe 2 oct. utiliza/il $e 8x8# sau 8x87
H2 $$ ,930 7 intreg pe , oct. utiliza/il $e 8038# sau 8x87
H3 $E ,930 7 intreg pe 8 oct. utiliza/il $e 8x87 '"2NJ*
H, $t ,930K 7 pacIe$ $ecimal '10 oct.* utiliza/il $e 8x87
H9 $$ ,9.30 7 short real ', oct.* utiliza/il $e 8x87
H# $E ,.93!;, 7 long real '8 oct.* utiliza/il $e 8x87
H7 $t ,930.0 7 temporar@ real '10 oct.* $irect utiliz. 8x87
#
12., Instructiuni pentru trans&er $e $ate la 8x87
Coprocesorul 8x87 executa #> instructiuni '72 la 80287*. Instructiunile $e trans&er
8x87 executa incarcarea'sau memorarea* $atelor, $e tipurile precizate, $in memorie in registrul
4'0*, sau intre registrele 8x87. 4chim/ul $e $ate cu memoria este insotit $e con%ersia lor in
temporar@ real $aca e cazul, sau aFustarea mantisei si exponentului,pentru 4K23 si "2NJ
3!A".
Toate instr!cti!nile de incarcare decre#enteaza inainte stiva.3! eista instr!cti!ni
i#ediate. .entru trans&erul $atelor intre locatii $e memorie se &olosesc instructiunile 8x8#
cunoscute. .entru precizarea unei a$rese $e operan$ $in memorie se pot &olosi toate mo$urile
$e a$resare. 3eg. 4'0* se poate nota 4.
.rezentam sintetic instructiunile $in aceasta grupa8
Trans%er!ri de n!#ere intre&iI
)I"1 intreg 7 integer loa$ 7 incarca $in memorie in 4
)I4 intreg 7 integer store 7 memorare 4 ca intreg
)I"1. intreg 7 i$em )I"1 urmat $e $ecrem. sti%a reg. 'pop*
)3N1IN 7 rotunFire la intreg a lui 4
Trans%er!ri de n!#ere zeci#ale codi%icate binarI
)5"1 $ecimal 7 5C1 loa$ 7 incarcare nr. zecimal $in memorie
)54 $ecimal 7 5C1 store 7 memorare 4 ca nr.zecimal
Trans%er!ri de n!#ere reale intre ST si #e#orieI
)"1 real 7 incarcare numar real $in memorie in 4
)4 real 7 memorare 4 la o a$resa $e memorie
)4. real 7 i$em ca )"1 urmat $e $ecrem. sti%a registre
Trans%er!ri intre ST si re&istrele stivaI
)"1 4'I* 7 4'I* 7C 4
)"1 4 7 copiaza 4 in sus in sti%a $e registre
)4 4'I* 7 4 7C 4'I*
)4. 4'I* 7 4 7C 4'I* si incrementare sti%a reg.'pop*
)HCK 7 4 B=C 4'1* interschim/
)HCK 4'I* 7 4 B=C 4'I*
)H3AC 7 exp'4* =C 4 , mantisa'4* =C 4'1* si push
)1!C4. 7 $ecrementare stacI pointer registre
)INC4. 7 incrementare stacI pointer
Incarcari de constante in STI
.entru a suplini lipsa incarcarilor ime$iate exista instructiuni care incarca in 4 anumite
constante, $es &olosite in calculele matematice. Incarcarea incepe cu $ecrement
)"1D 0.0 =C 4 7 constanta zero in ()
)"11 1.0 =C 4 7 constanta 1.
)"1.I 3.1,.. =C 4 7 constanta .I
)"1"2! log in /aza 2 $in ! =C 4
)"1"2 log in /aza 2 $in 10 =C 4
7
)"1"J2 log in /aza 10 $in 2 =C 4
)"1"N2 log natural $in 2 =C 4
.entru incarcarea altor %alori $e constante, ele se %or $e&ini in memorie cu un tip
recunoscut in () si %or &i incarcate prin instructiunile corespunzatoare tipului.
Instr!cti!ni "entr! re&istrele de stare
)440 $est 7 memorare 4A64 0231 la o a$resa $e memorie
)440 AH 7 memorare 4A64 0231 in AH 'la 80287*
)C"!H 7 sterge &lag7uile exceptie,intrerupere,/us@
.rin instructiunea )440 in$icatorii $e con$itii 8x87, pozitionati $upa executia
instructiunilor $e (), se $epun in memorie sau AH $e un$e se pot $epune in reg. )"AJ4 al lui
8x8# prin 4AK) 'instructiune 8x8#*. (aloarea acestor in$icatori se poate testa prin
instructiunile $e salt con$itionat 'Ncon$*, uzuale pentru a realiza rami&icari ale programului.
+entionam ca **, n! are instr!cti!ni "ro"rii de salt. In$icatorii C3 7 C0 se %or memora
automat peste D si 4. 3eg. )"AJ4 se poate incarca in AK prin "AK).

)4C0 $est 7 memoreaza reg. C2N32" 0231
)"1C0 sursa 7 incarca $in memorie reg. C2N32" 0231
)4!N( $est 7 memorare reg. !N(I32N+!N '1, octeti*
)"1!N( sursa 7 incarca $in memorie reg. !N(I32N+!N
)4A(! $est 7 sal%are !N(I32N+!N ; reg.generale '>,oct*
)3423! sursa 7 restaurare !N(I32N!+!N si reg.generale
oate unstructiunile $in aceasta clasa inclu$ un )0AI pentru sincronizare cu 8x8#.
!le au si &orma &ara )0AI cin$ au pre&ixul )N 'ex8 )N440,)N4C0, ...)N4A(!,
)N3423!*.
12.9.Instructiuni aritmetice in ()
Aceasta grupa cuprin$e instructiuni puternice $e calcul matematic, pentru care a &ost
conceput coprocesorul matematic. "a 80287 &ata $e 8x87, se a$auga $oar 3 instructiuni pentru
control in mo$ proteFat. 4etul lui 80387 cuprin$e cite%a instructiuni in plus care %or &i in$icate.
)0AI 7 asteapta terminarea unei instructiuni 8x87
)N2. 7 nici o operatie
)A54 7 %aloare a/soluta $in 4 O4O =C 4
Ad!nari real 6 real
)A11 4'1* ; 4 =C 4'1* 7a$unare registre
)A11 4,4'I* 4 ; 4'I* =C 4
)A11 4'I*,4 4 ; 4'I* =C 4'I*
)A11 real 4 ; real =C 4 7real $in memorie
)A11. 4'I*,4 4 ; 4'I* =C 4'I* 7a$unare urmata
$e incrementare sti%a registre 'pop*
Scaderi real 6 real
)CK4 7 schim/a semnul lui 4 'change sign*
)465 4'1* 7 4 =C 4'1* 7 sca$ere reg.
)465 4,4'I* 4 7 4'I* =C 4
)465 4'I*,4 4'I* 7 4 =C 4'I*
8
)465 real 4 7 real =C 4 7real $in memorie
)465. 4'I*,4 4'I* 74 =C 4'I* 7sca$ere si pop

Scaderi reale inverse 'reversed:
)4653 4 7 4'I* =C 4'I* 7su/stract real re%erse$
)4653 4'I*,4 4 7 4'I* =C 4'I*
)4653 4,4'I* 4'I* 7 4 =C 4
)4653 real real 7 4 =C 4 7real $in memorie
)4653. 4'I*,4 4 7 4'I* =C 4'I* 7sca$ere si pop reg
Co#"aratii n!#ere reale
)C2+ 4 7 4'1* =C pozitionare in$icatori $e con$itie
)C2+ 4'I* 4 7 4'I* =C pozit.in$ic.con$itie
)C2+ real 4 7 real =C pozit.in$ic.con$itie
)C2+. 4'I* 4 7 4'I* 7comparatie si apoi pop reg
)C2+.. 7compara 4 cu 4'1* si apoi $u/la incrementare'pop*
)4 7compara 4 cu 0 4 7 0 =C pozit.in$ic.'test 4*
)HA+ 7examineaza 4 si poz.in$icatorii C3,C2,C1,C0 pentru cazul unor rezultate
anormale'$epasiri in&erioare sau superioare*
Comparatia consta $intr7o sca$ere a operan$ului speci&icat $in %aloarea lui 4 si
pozitionarea in$icatorilor $e con$itie, &unctie $e rezultat '%aloarea operanzilor nu se shim/a*
ast&el8
C3'D* C0'4*
0 0 pt. 4 C re&erinta 'rezultat C 0*
0 1 4 C re&erinta 'rezultat B 0*
1 0 4 = re&erinta 'rezultat = 0*
1 1 7rezultat ;in&init sau 7in&init
In$icatorii C377C0 &ac parte $in primul octet $in 4A64 0231, se memoreaza cu
)440 AH, in AH $e un$e se $epun cu 4AK) in reg )"AJ4 si se pot testa cu
instructiuni $e salt con$itionat.

O"eratii real 6 intre&
)IA11 intreg 4 ; intreg =C 4 7intreg $in memorie
)I465 intreg 4 7 intreg =C 4
)I4653 intreg intreg 7 4 =C 4 7su/stract re%erse$
)IC2+ intreg 4 7 intreg =C pozitioneaza in$icatorii
)IC2+. intreg comparatie 4 cu intreg si pop reg
)I+6" intreg 4<intreg =C 4 7inmultire cu intreg
2peran$ul intreg, $e orice lungime, este citit $in memorie, con%ertit in () 'real* si utilizat in
instructiune.
O"eratii de in#!ltire si i#"artire in H.
)+6" 4'1*<4 =C 4'1* 7inmultire real 7 real
)+6" 4'I*,4 4'I*<4 =C 4'I*
)+6" 4,4'I* 4<4'I* =C 4
)+6" real 4<real =C 4 7real $in memorie
)+6". 4'I*,4 4'I*<4 =C 4 7inmultire si pop
)1I( 4'1*/4 =C 4'1* 7impartire real 7 real
)1I( 4'I*,4 4'I*/4 =C 4'I*
)1I( 4,4'I* 4/4'I* =C 4
)1I( real 4/real =C 4 7real $in memorie
>
)1I(.4'I*,4 4'I*/4 =C 4 7impartire si pop
)1I(3 4/4'1* =C 4'1* 7$i%i$e re%erse$
)1I(34'I*,4 4/4'I* =C 4'I*
)1I(34,4'I* 4'I*/4 =C 4
)1I(3real 4/real =C 4 7real $in memorie
)1I(3. 4'I*/4 4'I*/4 =C 4'I* 7$i%i$e re%. si pop
Instr!cti!ni s"eciale
In aceasta grupa am cuprins instructiuni $e calcul &unctii exponentiale, logaritmice si
trigonometrice usuale8
).3!+ pentru 4/4'1* $a restul partial 'mo$ul* in 4
)4P3 ra$icalul $in 4 =C 4 pt. 4 C 0
)C24 cos'4* =C 4 7 calcul cos'x* numai 80387
)4IN sin'4* =C 4 7 calcul sin'x* numai 80387
).AN tang'a* 7 pentru 0 B a B .I/,
7 rezultatul su/ &orma x/@ in 4 si 4'1*
).AAN arctg'x/@* =C 4 7 un$e x in 4 si @ in 4'1*
7 rezultatul in noul 4 care este $upa pop in locul lui @
)4CA"! calculeaza &= 4<2<<4'1* =C 4
7 interpreteaza 4'1* ca intreg si il a$auga la exponentul
lui 4 pentru a o/tine inmultirea cu 2 la puterea N
)L"2H calculeaza &= L<log2'H* =C4 'peste L $upa pop*
7 se cere HC0 in 4 si L 7real in 4'1*
)L"N2H.1 calculeaza &= L<log2'H;1* =C4 'peste L $upa pop*
7 se cere HC0 in 4 si L 7real in 4'1* pt.HBra$'2*/2 '0.79*
)2H+1 calculeaza &= 2<<H71 =C4 7un$e H in 4
Aceasta &unctie permite calculul &unctiilor exponentiale pentru orice /aza prin &ormulele
cunoscute8
10<<H = 2<<H<log2'10*
e<<H = 2<<H<log2'e* 7 un$e e este /aza log. naturali
L<<H = 2<<H<log2'L*
Constantele logaritmice se incarca prin )"1"2 si )"1"2!.
12.# !xemple $e programe cu instructiuni 8x87
)olosin$ instructiunile prezentate si exemplele $e program se %or scrie programe, care
sa utilizeze numere reale, intregi si zecimale co$i&icate /inar '5C1* pentru calcule matematice
utizin$ coprocesorul 8x87, real s7au emulat cu !+87 /". 7 4e %a asam/la programul si pentru
$atele constante generate cu $i&erite lungimi se %a stu$ia mo$ul $e co$i&icare si se %or calcula
%alorile in zecimal pentru numerele reale.
7 4e %a stu$ia mo$ul $e co$i&icare a instructiunilor $e ()
7 4e %a scrie un program pentru una $in pro/lemele8
7 rezol%area unei ecuatii $e gra$ul 2,
7 calcul sin'x* si cos'x* prin $ez%oltare in serie,
7 extragerea ra$acinii patrate $upa &ormula iterati%a8
10
H'i*= QN/H'i71*;H'i71*R/2 7 un$e H'1*=N/2
7 calculul unei integrale $e&inite cu meto$a trapezelor
.rezentam mai Fos listingul unui exemplu $e program simplu in care se $eclara $i&erite
tipuri $e %aria/ile si se executa cite%a instructiuni. .rogramul %a tre/ui lansat $in 124 sau
Co$e(ie:. !l %a a&isa pe ecran rezultatul a$unarii a $oua numere zecimale co$i&icate /inar L3
= L1 ; L2. Cele $oua numere au &ost alese incit rezultatul sa &ie $e ?tip A4CII? pentru a putea
&i a&isat $irect pentru %eri&icare. 4e %a a&isa 879,.
!+87 / l 7incarcare emulator rezi$ent in memorie
+A4+ ex1&.asm,ex1&,ex1& /r 7 macroasam/lare cu instr.() reale
7777777777777777777777777777777777777777777777777777777777777777
+icroso&t '3* +acro Assem/ler (ersion 9.00 #/>/>3 2382>81,
.age 171
a$resa co$ generat etic. instructiuni
.mo$el small
0100 .stacI 29#
< segment $e $ate <
0000 .$ata
0000 152)91,0 x1 $$ 3.,9#
000, 333383,0 x2 $$ ,.1
0008 0807090,000000000000 @1 $t ,090708h
0012 30303030000000000000 @2 $t 30303030h
001C 00000000000000000000 @3 $t 0
002# 2, $/ STS
0027 00000000 x3 $$ 0
0025 0000803) x, $$ 1.0
002) 0000A0,0 x9 $$ 9.0
< segment $e co$ cu speci&icare coprocesor <
.8x87
0000 .co$e
0000 58 7777 3 st18 mo% ax,U$ata
0003 8! 18 mo% $s,ax
0009 >5 1> 0# 0000 3 &l$ x1
000A >5 18 0# 000, 3 &a$$ x2
000) >5 1> 1# 0027 3 &st x3
001, >5 1) 2# 0008 3 &/l$ @1
001> >5 1) 2# 0012 3 &/l$ @2
001! >5 18 C1 &a$$ st,st'1*
0021 >5 1) 3# 001C 3 &/stp @3
< a&isare text pe ecran <
002# 5A 001C 3 mo% $x,o&&set @3 002> 5, 0>
mo% ah,>
0025 C1 21 int 21h
0021 5, ,C mo% ah,,ch
002) C1 21 int 21h
0031 en$ st1
+icroso&t '3* +acro Assem/ler (ersion 9.0 #/>/>3 2382>81,
11
4egments an$ Jroups8
N a m e "ength Align Com/ine Class
1J326. .. . . . . . . . . . . J326.
V1AA . . . . . . . . . . 0033 0231 .65"IC S1AAS
4ACW . . . . . . . . . . 0100 .A3A 4ACW S4ACWS
V!H . . . . . . . . . . . 0031 0231 .65"IC SC21!S
4@m/ols8
N a m e @pe (alue Attr
41 . . . . . . . . . . . . " N!A3 0000 V!H
H1 . . . . . . . . . . . . . " 10231 0000 V1AA
H2 . . . . . . . . . . . . . " 10231 000, V1AA
H3 . . . . . . . . . . . . . " 10231 0027 V1AA
H, . . . . . . . . . . . . . " 10231 0025 V1AA
H9 . . . . . . . . . . . . . " 10231 002) V1AA
L1 . . . . . . . . . . . . . " 5L! 0008 V1AA
L2 . . . . . . . . . . . . . " 5L! 0012 V1AA
L3 . . . . . . . . . . . . . " 5L! 001C V1AA
UC21! . . . . . . . . . . . . . !H V!H
UC21!4ID! . . . . . . . . . . . !H 0
U1AA4ID! . . . . . . . . . . . !H 0
U)I"!NA+! . . . . . . . . . . . !H ex1&
30 4ource "ines
30 otal "ines
23 4@m/ols
90>,0 ; 30>8>2 5@tes s@m/ol space &ree
0 0arning !rrors
0 4e%ere !rrors
7777777777777777777777777777777777777777777777777777777777777777777
4e o/ser%a ca numerele zecimale L1 si L2 se aliniaza la stinga un$e ci&rele au si
pon$erea cea mai mare.
Numerele H1 si H2 care sint reprezentate in () 'reale* au octetii in%ersati, incit
exponentul si pon$erile mai mari apar in $reapta. (aria/ila H3=0 are atit mantisa cit si
exponentul 0.
H, = 1. are reprezentarea 00 00 80 3) care in registru %a &i8
3) 80 00 00
1eoarece primul /it $in octetul 2 este $in exponent printr7o $eplasare spre stinga o/tinem8
7) 00 00 00 $eci !H. = 7) 7 7) = 0
+antisa este aparent 0 $ar contine un 1. care in 4K23 3!A" nu se reprezinta. !a
este pentru numerele normalizate8
1 =B +antisa B 2 $eci +antisa = 1 pentru H,
(aloarea lui H, %a &i8
H, = +<2<<!H. = 1.<2<<0 = 1.
12
.roce$am la &el pentru H9 = 9. care e reprezentat 00 00 A0 ,0
In registru %a &i ,0 A0 00 00 si $upa o $eplasare stinga $e%ine8
81 ,0 00 00 a%in$ $eci !H. = 81 7 7) = 2
+antisa este + = 1. ; ,/1# ; 0/29# = 1.29
H9 = +<2<<!H. = 1.29<2<<2=1.29<, = 9. care e %aloarea corecta
4e o/ser%a ca pentru a simpli&icarea calculului mantisei lucram cu puterile negati%e a lui
1# si cu ci&rele hexa $in mantisX.
Calculam si %aloarea lui H2 = ,.1 care se reprezinta prin8
33 33 83 ,0 si $e%ine $upa in%ersarea ci&relor ,0 83 33 33 iar $upa o $eplasare $reapta
81 0# ## ## .3ezulta exponentul8
!H. = 81 7 7) = 2 iar mantisa8
+ = 1. ; 0/1# ; #/'1#<1#* ; #/'29#<1#* ; #/'29#<29#* ; ...
H2 = 2<<2 <+ = ,<+ = , ; 2,/29# ; 2,/'29#<1#* ;..=,.0>379;0.0098#
H2 = ,.0>>#1 cu o aproximatie su/ $estul $e /una su/ 1Y $esi am negliFat ultimele 3 ci&re
hexa $in mantisa
Pro&ra# de calc!l "entr! %!nctia e"onentiala
Calculam %aloarea &unctiei exponentiale prin $escompunerea in serie $upa &ormula8
!<<x = 1 ; x/1Z ; x<<2/2Z x<<3/3Z ; x<<,/,Z ; ....
Calculam suma iterati% 4 = 4 ; pina cin$ termenul $e%ine mai mic $ecit !.4 = 0.0001
6n termen i il calculam $upa &ormula = <H/I
(aria/ilele &olosite si %alorile initiale sint8
4 7 suma partiala, initial 4 = 1
7 %aloarea termenului curent, initial = 1
I 7 rangul termenului curent, initial I = 1
In $reapta programului se %e$e structura consi$erata pentru sti%a $e registre a coprocesorului
in momentul initial.
; -----------------------------------------------
; PROGRAM DE CALCUL EXP(X)
; ------------------------------------------------
.MODEL SMALL
.STACK 256
.80287
.DATA
EPS DD 0.00001 ;precizie
X DD 2.541
EX DD 0. ;valoare calculata
.CODE
START: MOV AX!DATA
MOV DSAX
; Fiecare incarcare de registru e precedata de decrem. stiva reg.
"LD X ; incarcare X real
"LD1 ; incarcare constanta 1.
477777C ;0
;1
;2
;3
;,
;9
=1
I=1
4=1
1
H
13
"LD ST ; S=1
"LD ST ; I=1
"LD ST ; T=1
C#CLU: "MUL STST(4) ; T=T*X =>ST
"D#V STST(1) ; T=T*X/I
"ADD ST(2)ST ; S=S+T
"#$CSTP ; incrementare pointer reg.
"ADD STST(2) ; I=I+1
"DECSTP ; reacere pointer reg.
"COM EPS ; T ! "#S $
"STS% AX ; salvare indicatori si test
"%A#T ; asteptare terminare instr. %F
SA&" ; memorare indicatori in reg. F&'(S
'L GATA ; test S=1 )indicator *+,
'MP C#CLU
"LD STST(2) ; memorare rezultat
"ST EX
GATA: MOV A&4C&
#$T 21& ; iesire in -.S
E$D START
12.7. Con%ersie numere $in intreg in &lotant
Consi$eram un numar /inar intreg pe , octeti '32 /iti*, care il %om con%erti in %irgula
&lotanta '()* pe , octeti '4K23 3!A"*
23c./.
3!#ar intre& 3
$ 6 vir&!la "entr! #antisa H. $ 6 vir&!la intre&
CAR 12,J2? 6 caracteristica initiala n!#ar intre&

Consi$eram numarul poziti% intreg N, care are %irgula %irtuala in $reapta, ca o mantisa
supraunitara cu o caracteristica CA3 asociata8
3 1 3E2EE9 =C E=P 1 9 1K CAR 1 E=PJ12, 1 12,
1aca N este consi$erat o mantisa pentru reprezentarea () short real, atunci %irgula %a
&i %azuta $eplasata cu 23 c./. spre stinga. .entru a nu schim/a %aloarea numarului, care $e%ine
N<2<<'723*, tre/uie sa marim caracteristica cu 23. .astrin$ separat mantisa si caracteristica
%om a%ea un numar in () cu8
M 1 3E2EE'62?: si CAR 1 12,J2? 1 189 6caracteristica initiala
Cum numarul nostru in () este in general nenormalizat, il %om supune unei
normalizari, utilizin$ o macroinstructiune N),, pe care o %om $e&ini si care apeleaza un
su/program 4N),. Numarul ce se normalizeaza %a &i $at prin mantisa +1 si caracteristica
C1 separate. !le %or &i incarcate in 1H8AH si respecti% in 5H $e macroinstructiunea N),, care
1,
$upa chemarea su/programului 4N), o/tine numarul in &lotant in 1H8AH si il memoreaza
peste mantisa initiala '%ezi programul alaturat*.
4u/programul 4N), consi$era ca mantisa este nenormalizata, existin$ 2 cazuri8
a* 7 !ste ocupata zona caracteristicii 'primul octet*, caz in care se &ac $eplasari spre
$reapta a mantisei si incrementari corespunzatoare ale caracteristicii, pentru a nu mo$i&ica
%aloarea numarului.
/* 7 +antisa are zerouri pe primele pozitii $upa %irgula si in acest caz se &ac $eplasari
spre stinga si $ecrementari ale caracteristicii, pina cin$ primul /it $in octetul 2 al mantisei
$e%ine 1.
1eplasarile spre stinga sau $reapta ale mantisei, ce se gaseste in registrele 1H8AH se
&ace com/inin$ o $eplasare a unui registru cu rotirea prin carr@ a celuilalt. 1upa ce mantisa a
&ost normalizata, primul /it care este 1 implicit se sterge si mantisa se concateneaza cu
caracteristica.
1aca a%em macroinstructiunea $e normalizare N),, atunci con%ersia unui numar intreg
in () se re$uce la o normalizare cu o caracteristica initiala CA3=190
.entru exempli&icare consi$eram numarul intreg N = 9
N = 00 00 00 09 si CA3 = 127 ; 23 = 190 = >#K
.entru normalizare sint necesare 21 $eplasari spre stinga8
+ = 00 A0 00 00 si CA3 = 190 7 21 = 12> = 81K
.rin suprimarea /itului 1 implicit rezulta8
+ = 00 20 00 00
A$augin$ caracteristica o/tinem numarul in &lotant8
N) = ,0 A0 00 00 care reprezinta in &lotant numarul intreg 9.
; --------------------------------
; PROGRAM DE CO$VERS#E #$TREG REAL
; ---------------------------------
.286(
.287
)*++,-
..*),/ +.0//
.+10(2100
.)010
3 )) 51420 ; nr intreg
34 )) 51420. ; nr in v
(31 )5 127627 ; caracteristica implicita
.(*),
; -einitie macro pt normalizare v
844 MACRO (1.1 ; caract. si mantisa
PUS&A ; salvare registre
.*9 035*:) ;1: .1 ; mantisa pe / octeti
.*9 )35*:) ;1: .162
.*9 <3(1 ; caract. pe 0 octeti
CALL S$"4 ; su1program normalizare
.*9 5*:) ;1: .103 ; memorare nr. normalizat
.*9 5*:) ;1: .162)3 ; peste mantisa initiala
POPA
E$DM
19
; ---------------------------
; S=<;:*-:0. 8*:.0/>?0:, V"
; - >81:0:, .081>+0 4 *(1 >8 DX:AX +> (0:0(1 >8 @X
; - >,+>:, 8: >8 94 ;, 4 *(1 >8 DX:AX
; ---------------------------
+844 PROC8,0:
; normalizare prin depl dreaapta mantisa si increm. *'2
(11: (.; )A0 ; test octet1 din mant =+
B? (2 ; octet1=+ depl. stinga
>8( <3 ; car =car+1 si depl. dreapta -X3'X
+A: )31 ; -X 4> *F 4> 'X
:(: 031
B.; (11
; normalizare prin depl. stinga mantisa si decrem. *'2
(2: .*9 (/80A ; veri. 1it1 din octet0 mantisa
08) (/)/ ; selectie 1it1
(.; (/80A
B? (7 ; terminare normalizare
),( <3 ; car=car41 si depl. stinga mantisa
+A/ 031 ; -X !4 *F !4 'X
:(/ )31
B.; (2
; *oncatenare *'2 cu mantisa normalizata
(7: 08) )/74A ; sterge 1it 1 din mantisa )implicit=1,
+A/ )31
*: )A</ ; concatenare *'2 si mantisa
+A: )31
:,1
+844 E$DP
; ------------------------------
; ;:*-:0. ;:>8(>;0/ (*89,:+>, >81:,- 4/*1081
; ------------------------------
+11: .*9 03!)010
.*9 )+03
;
(>4: 844 (313 ; conversie intreg real
;
,8) +11
---------------------------------------------------
1#
12.8. Con%ersia numerelor $in () in intreg
4i in acest caz separam caracteristica 'CA3* $e mantisa '+*. +antisa %a &urniza ci&rele
semni&icati%e ale numarului ' #77 la short real*, iar caracteristica %a $a or$inul $e marime.
Algoritmul %a &i in%ers $ecit la con%ersia intreg 7 &lotant.
8c./. 23c./.
+ A N I 4 A
S7 %irgula mantisa %& S 7%irgula pt.numar intreg
CA3 7 caracteristica
(aloarea numarului in () este8
N) = +<2<<!H.
.entru a a%ea $eplasari numai intr7un singur sens, $eplasam initial mantisa la stinga cu
8 c./. si completam 1 implicit pe primul /it. (om consi$era numarul intreg rezultat $upa
mutarea %irgulei mantisei 'care se gaseste acum $upa primul /it*, spre $reapta cu nr. $e pozitii
in$icate $e exponent ' !H. = CA37127 *.
!xponentul speci&ica nr. $e ci&re /inare intregi ale numarului, iar restul &iin$ /iti ce $au
zecimale, care se pier$ in cazul numerelor intregi. (om a%ea urmatoarele cazuri8
a* !H. = 31 7 %irgula se %a $eplasa cu 31 c./. spre $reapta, chiar peste %irgula
corespunzatoare numerelor intregi. +antisa %a reprezenta chiar numarul intreg.
/* !H. B 0 7 %irgula %a tre/ui mutata spre stinga si numarul %a &i B 1, $eci intregul rezultat
%a &i N = 0.
c* !H. C 31 7 %irgula tre/uie mutata cu mai mult $e 31 pozitii spre $reapta, rezultin$
$epasire 'numar cu mai mult $e 32 c./.*
$* 0 =B !H. B 31 7 %irgula se %a $eplasa spre $reapta cu mai putin $e 31 c./. si %a tre/ui
a$usa pe ultima pozitie $in $reapta, corespunzatoare numerelor intregi. Aceasta se realizeaza
cu 31 7 !H. $eplasari spre $reapta.
(om exempli&ica algoritmul pe numarul
N) = 3.,9# care in hexa este N) = ,0 91 2) 15
CA3 = ,0K =C !H. = CA3 7 7)K = 80K 7 7)K = 1
+ = 00 91 2) 15 7 mantisa
1upa $eplasarea stinga cu 8 c./. si completare 1 implicit8
+ = 11 2) 15 00
.entru trans&ormarea in numar intreg sint necesare
31 7 !H. = 31 7 1 = 30 $eplasari spre $reapta si rezulta8
N = 00 00 00 03 restul /itilor &ractionari s7au pier$ut
; -------------------------------------
; PROGRAM DE CO$VERS#E "LOTA$T - #$TREG
; ---------------------------------------
17
.286(
.287
)*++,-
..*),/ +.0//
.+10(2100
.)010
.),; )< 1017CD,;0+>:,DD $:. >8 V" ;:,0 .0:, EC
34 )) 51420. ; numar in %F 5
)) 0 ; numar convertit intreg
3: )) 51420 ; numar intreg de reerinta
; -einitie macro pentru conversie pozitiv lotant 4 intreg
C"# MACRO $$" ; numar intreg si lotant
;=+A0 ; salvare registre
.*9 )3 5*:) ;1: 8462 ; nr. lotant pe / oct. in -X3'X
.*9 035*:) ;1: 84
CALL SC"# ; c6emare su1pr. conv. lotant 4intreg
.*9 5*:) ;1: 862)3 ; memorare numar intreg
.*9 5*:) ;1: 803
E$DM
; -------------------------------------------
; S=<;:*-:0. (*89,:+>, 4/*1081 - >81:,-
; - >81:0:, DX:AX 8=.0: 4/*1081
; - >,+>:, DX:AX 8=.0: >81:,- (*89,:1>1
; --------------------------------------------
SC"# PROC$EAR
.*9 <3)3 ; veriicare 7F=+
*: <303
B8? (1 ; 7F > +
RET ; 7F = + => 7 = 7F
(1: .*9 <3)3 ; 15 = *'2
+A/ <31 ; 16 = *'2
.*9 (38 ; 8 depl. stinga mantisa
)8: +A/ 031 ; -X !4 *F !4 'X
:(/ )31
/**; )8
*: )A80A ; ortare 1it implicit 1 mantisa
+=< <A127 ; "X# = *'24109
(.; <A71 ; comparare "X# cu :1
B8? (7
RET ; "X# = :1 => 7=7F nu se ac deplasari
(7: B+ (4 ; "X# ! :1
.*9 )3*44+,1 .),; ; "X# >:1 4 mesa; depasire
.*9 0AF
>81 21A
RET
(4: (.; <A0 ; comparare "X# cu +
B8+ (5 ; + =! "X# ! :1
3*: 0303 ; "X#!+ => 7=+
.*9 )303
RET
18
(5: .*9 (/71 ; + =! "X# ! :1
+=< (/<A ; *& = :14"X# nr.deplasari dreapta
.*9 (A0
(6: +A: )31 ; :14"X# deplasari dreapta mantisa
:(: 031 ; -X 4> *F 4> 'X
/**; (6
RET
SC"# E$DP
; -------------------------------------------
; P:*-:0. ;:>8(>;0/ (*89,:+>, 4/*1081 >81:,-
; -------------------------------------------
ST1: .*9 03!)010 .*9 )+03
;
(*89: C"# 334 ; conversie X 4> XF
;
>81 7 ; terminare
E$D ST1
------------------------------------------------------------------
1>

S-ar putea să vă placă și