Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Coprocesorul se initializeaza odata cu activarea semnalului RESET, generat in sistemul de calcul.
- In interiorul coprocesorului avem o memorie de 80 de octeti organizata sub forma unei stive de opt elemente de 10 octeti ecare.
- Deci cu ajutorul coprocesorului putem efectua urmatoarele operatii:
- 1) citirea datelor in memoria interna a coprocesorului (pe stiva) din memoria calculatorului.
- 2) efectuarea operatiilor aritmetice necesare.
- 3) scrierea rezultatului in memoria calculatorului.
- Tipurile de date in virgula flotanta sunt:
- 1) Real scurt, reprezentat pe 32 bit (1 bit de semn, 23 bit mantisa, 8 bit caracteristica)
- 2) Real lung, reprezentat pe 64 bit (1 bit de semn, 52 bit mantisa, 11 bit caracteristica)
- 3) Real cu precizie ridicata, reprezentat pe 80 bit (1 bit de semn, 64 bit mantisa, 15 bit caracteristica)
- Proiectantii coprocesorului au clasicat erorile in urmatoarele 6 clase:
- 1) Invalid operation: operatie invalida.
- depasire superioara sau inferioara a stivei interioare a coprocesorului. (impartire la 0 , adunare/scadere la infinit)
- 2) Overflow: depasire superioara.
- Rezultatul depaseste numarul cel mai mare ce se poate reprezenta. Coprocesorul inscrie infinit in locul rezultatului si continua lucrul.
- 3) Zero Divizor: impartire cu zero.
- Impartitorul impartirii de efectuat este zero, iar deimpartitul nu este zero sau innit.
- 4) Underflow: depasire inferioara
- Valoarea rezultatulu in modul este mai mica decat numarul cel mai mic reprezentabil.
- Rezultatul va zero, coprocesorul continua lucrul.
- 5) Denormalized: operand nenormalizat.
- Aceasta exceptie apare daca unul din operanzi nu este normalizat sau rezultatul nu se poate reprezenta normalizat (de exemplu este atat de mic incat este imposibila normalizarea lui).
- 6) Inexact result: rezultat inexact.
- Rezultatul operatiei este inexact din cauza unor rotunjiri prescrise sau necesare.
- Putem avea astfel de rezultate dupa impartire, daca impartim de exemplu 2.0 cu
- 3.0 rezultatul se poate reprezenta doar ca o fract,ie infinita.
- Instructiuni de transfer de date
- Instructiuni de incarcare (LOAD)
- 1) fild adr - Incarca pe stiva variabila intreaga de la adresa adr.
- 2) fld adr - Incarca pe stiva valoarea reala (scurta sau lunga) de la adresa de memorie adr.
- 3) fbld adr - Incarca pe stiva variabila din memorie de tipul zecimal impachetat (definit cu DT) de la adresa de memorie adr.
- Instructiuni de memorare (STORE)
- 1) fist adr - Memoreaza la adresa adr valoarea de pe stiva (ST(0)) ca numar. INDICATORUL NU SE MODIFICA.
- 2) fistp adr - Memoreaza la adresa adr valoarea de pe stiva (ST(0)) ca numar intreg.
- Instructiunea afecteaza stiva: ST(0) este eliminat prin decrementarea indicatorului de stiva.
- 3) fst adr - Memoreaza la adresa adr valoarea de pe stiva (ST(0)) ca numar intreg. INDICATORUL NU SE MODIFICA
- 4) fstp adr - Memoreaza la adresa adr valoarea de pe stiva (ST(0)) ca numar in reprezentarea in virgula mobila.
- ST(0) este eliminat prin decrementarea indicatorului de stiva.
- 5) fbstp adr - Memoreaza la adresa adr valoarea de pe stiva (ST(0)) ca numar zecimal impachetat.
- Instructiuni transfer de date intern
- 1) fld ST(i) - Pune pe stiva valoarea de pe ST(i). Deci valoarea din ST(i) se va gasi de doua ori: in ST(0) si ST(i+1).
- 2) fst ST(i) - Valoarea din ST(0) este copiata in elementul i din stiva. Valoarea veche din ST(i) se pierde.
- 3) fstp ST(i) - Valoarea ST(0) este copiata in elementul i din stiva. Valoarea veche din ST(i) se pierde. ST(0) este eliminat prin decrementarea indicatorului din stiva.
- 4) fxchg ST(i) - Se schimba intre ele ST(0) si ST(i)
- Instructiuni incarcare a constantelor
- 1) fldz - Zero pe varful stivei.
- 2) fld1 - 1.0 pe varful stivei.
- 3) fldpi - Pi pe varful stivei.
- 4) fldl2t - log{2}{10} pe varful stivei.
- 5) fldl2e - log{2}{e} pe varful stivei.
- 6) fldlg2 - lg2 pe varful stivei.
- 7) fldln2 - ln2 pe varful stivei.
- Instructiuni aritmetice
- ST(i) - registrul numarul i al coprocesorului matematic
- m32fp - o variabila pe 32 bit (declarata ca DD) ce retine un numar in virgula mobila. (fp - Floating Point)
- m64fp - o variabila pe 64 bit (declarata ca DQ) ce retine un numar in virgula mobila. (fp - Floating Point)
- m16int - o variabila pe 16 bit (declarata ca DW) ce retine un numar intreg.
- m32int - o variabila pe 32 bit (declarata ca DD) ce retine un numar intreg.
- f<op> ST(0) <- ST(0) op ST(1)
- f<op> m32fp ST(0) <- ST(0) op ST(1) op m32fp
- f<op> ST(0), ST(i) ST(0) <- ST(0) op ST(i)
- f<op> ST(i), ST(0) ST(i) <- ST(i) op ST(0)
- f<op>p ST(1) <- ST(1) op ST(0), elimina ST(0)
- f<op>p ST(i), ST(0) ST(i) <- ST(i) op ST(0), elimina ST(0)
- fi<op> m32int ST(0) <- ST(0) op m32int
- Deoarece operat, iile de scadere si impartire nu sunt comutative, avem si operatiile inverse pentru acestea, care au aceeasi forma dar se termina cu litera r (de la reverse):
- Instructiuni pentru compararea valorilor numerice
- fcom compara registrii ST(0) si ST(1). Varianta cu un operand compara registrul ST(0) cu operandul dat.
- fcomp este identica cu fcom, realizand in plus eliminarea registrului ST(0).
- fcompp elimina atat registul ST(0) cat si registrul ST(1).
- ftst compara registul ST(0) cu 0.0
- Functii in virgula mobila
- fsqrt ST(0) <- sqrt(ST(0))
- fscale ST(0) <- ST(0) x 2^(ST(1))
- fprem ST(0) <- ST(0) mod ST(1)
- fabs ST(0) <- |ST(0)|
- fchs ST(0) <- -ST(0)
- fptan ST(0) <- tan(ST(0))
- Instructiuni de comanda
- finit - Initializare-aducerea coprocesorului intr-o stare initiala cunoscuta ("software reset"). Dupa efectuarea instructiunii finit toate registrele coprocesorului se vor afla in starea initiala iar stiva va goala.
- fldcw adr - Se incarca in registrul de comanda cuvantul de la adresa adr in memorie.
Add Comment
Please, Sign In to add comment