Document, comentariu, eseu, bacalaureat, liceu si facultate
Top documenteAdmitereTesteUtileContact
      
    


 


Ultimele referate adaugate

Adauga referat - poti sa ne ajuti cu un referat?

Politica de confidentialitate



Ultimele referate descarcare de pe site
  CREDITUL IPOTECAR PENTRU INVESTITII IMOBILIARE (economie)
  Comertul cu amanuntul (economie)
  IDENTIFICAREA CRIMINALISTICA (drept)
  Mecanismul motor, Biela, organe mobile proiect (diverse)
  O scrisoare pierduta (romana)
  O scrisoare pierduta (romana)
  Ion DRUTA (romana)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  Starea civila (geografie)
 

Ultimele referate cautate in site
   domnisoara hus
   legume
    istoria unui galban
   metanol
   recapitulare
   profitul
   caract
   comentariu liric
   radiolocatia
   praslea cel voinic si merele da aur
 
despre:
 
Coprocesorul matematic: structura si model de programare. Emulator pentru virgula mobila.
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 
Coprocesorul Matematic 8087

Permite efectuarea de calcule matematice mai rapide decit cele efectuatecu procesorul principal. In principiu, opereaza in paralel cu un procesorprincipal, sincronizarea lor facindu-se pe linia WAIT (instructiunea WAIT).Comunicarea intre 8086 - 8087 se poate face numai prin intermediul memoriei(incepind cu 80286, exista o instructiune FSTSW care lucreaza cu registrul AX!!). Practic in utilizarea unui coprocesor se disting 3 etape importante:

1. - preluare date din memorie (introduse aici in rutina 8086, C, sau PASCAL)in registrele coprocesorului;2. - prelucrare date (etapa in care procesorul principal poate face altceva);3. - stocare date din registrele coprocesorului in memorie, deci posibilitateautilizarii lor in rutina 8086, C sau PASCAL.

Nota: etapele 1 si 3 necesita sincronizare cu procesorul principal!

Structura interna a coprocesorului 80x87 este reprezentata in FIG. 1.

Structura:

- 8 registre date de cite 80 biti organizate ca o stiva tip LIFO (notateST(0) (ST(0) va fi intilnit in literatura scris simplu ST), ... ST(7));- 1 reg. stare (SW);- 1 reg. control (CW).

CUVINT DE STARE 8087

Cuvintul de stare reflecta intreaga functionare a circuitului 8087. Acestregistru poate fi accesat prin executarea instructiunii 8087, care citesteregistrul de stare si il stocheaza in memoria sistemului astfel incit8086/8088 il poate analiza.

15 14 13 1211 10 9 8 7 6 5 4 3 2 1 0 B C3 STC2C1C0IRPEUEOEZEDEIO m6h10hc
B = BUSY -> 1 , 8087 executa un task 0 , 8087 liber

C3 C2 C1 C0 = CONDITION CODE, indica rezultatul unei comparari intre ST si un operand (OP), astfel: C3 C2 C0 0 0 0 - ST > OP; 0 0 1 - ST < OP; 1 0 0 - ST = OP; 1 1 1 - eroare (nu se pot compara); C1 - neafectat in urma unei comparari (ramine la valoarea binara 0) dupa o operatie;




ST (3 biti) = STACK TOP POINTER, indica registrul care este inmomentul curent in virful stivei; stiva este o memorie ciclica. Initial STeste 0; daca se incarca o valoare in ST(0) atunci ST devine 7 si scade lafiecare incarcare in registre, respectiv creste la fiecare extragere dinregistre, cu o unitate (se poate spune ca are valoarea negata a numarului deordine al registrului din virful stivei in acel moment !!).

IR = INTERRUPT REQUEST

EXCEPTION FLAGS (1 = a fost detectata o exceptie)

PE = PRECISION UE = UNDERFLOW OE = OVERFLOW ZE = ZERODIVIDE DE = DENORMALIZED OPERAND IO = INVALID OPERATIONBitul 6 este rezervat. Bitii 5 - 0 indica conditii specifice in legatura cuexceptiile detectate de 8087 in timpul operarii. O exceptie va determinagenerarea unei intreruperi (daca intreruperile sint validate), astfel: acestiindicatori eroare sint legati intern printr-un SAU la IR, deci cind apare oeroare, daca indicatorul respectiv nu este mascat, IR devine 1. De asemenea bitii C3.. C0 sint pozitionati de instructiunea FXAM astfel:C3 - 0 -> not empty; 1 -> empty;C2 - 0 -> nenormalizat; 1 -> normalizat;C1 - 0 -> pozitiv; 1 -> negativ;C0 - 0 -> corect; 1 -> eronat; CUVINT DE CONTROL 8087

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IC RC PCIEMPMUMOMZMDMIM

IC = INFINITY CONTROL (control infinitate) 0 -> +i = -i 1 -> +i <> -i RC = ROUNDING CONTROL (control rotunjire) 00 -> nearest or even 01 -> down (toward -i) 10 -> up (toward +i) 11 -> chop(truncate toward 0) PC = PRECISION CONTROL (control precizie) 00 -> mantisa 24 biti 01 -> rezervat 10 -> mantisa 53 biti 11 -> mantisa 64 biti IEM = INTERRUPT ENABLE MASK (masca generala indicatori eroare) 0 -> Interrupts Enabled 1 -> Interrupts Disabled (Masked)PM,UM.....IM - masti indicatori eroare, EXCEPTION MASKS =1 => a fost detectatao exceptie. PM = PRECISION UM = UNDERFLOW OM = OVERFLOW ZM = ZERODIVIDE DM = DENORMALIZED OPERAND IM = INVALID OPERATIONBitii 15,14,13 si bitul 6 sint rezervati.

Datele folosite de coprocesor sunt memorate in registrele lui de datein format real temporar (format IEEE de 10 octeti): 70 0------------------------------------------------- |S| Exponent |1.... Mantisa normalizata |-------------------------------------------------unde: S - bit de semn Exponent - 8 biti ptr. numere reale format scurt 11 biti ptr. numere reale format lung Mantisa - 23 biti ptr. numere reale format scurt 52 biti ptr. numere reale format lung(primul bit este pus pe 1, mantisa fiind normalizata)aformat scurt --> 32 biti (DD), format lung --> 64 biti (DQ)i

Observatii importante pentru lucrul cu coprocesorul Registrele fiind organizate ca o stiva, incarcarea unei date din memorieintr-un registru coprocesor are efectul unei instructiuni PUSH. RegistrulST(0) este intotdeauna in virful stivei si ca urmare orice data incarcataajunge in ST(0), iar datele deja existente in registrul coprocesorului semuta, ca intr-o stiva, succesiv in registrele cu un numar de ordine mai mareaflate "sub" ST(0).

Instructiunile coprocesoruluiPot fi: - cu 2 operanzi (unul din ei fiind, obligatoriu, ST(0)) - cu 1 operand (unul din registrelec coprocesorului sau memorie),celalalt opnd. fiind implicit ST(0) (virful stivei); - fara operanzi: cind sint implicati, automat, ST(0) si ST(1).

Observatie comuna: Mnemonicile de instructiuni care incep cu FI presupun ca operandul dinmemorie este un intreg pe 16, 32 sau 64 octeti generat respectiv cu directivaDW, DD sau DQ, iar cele care incep cu FB presupun ca operandul este pe 10octeti (generat cu DT) in format BCD impachetat. Tipuri de instructiuni

1.Instructiuni de transferA. memorie --> ST(0)

FLD mem32,64,80 FILD mem32,64,80 FBLD mem32,64,80 Efect: toate aceste instructiuni incarca sursele aferente in ST(0), iar ST(0)->ST(1),......ST(6)->ST(7) si ST(7) se pierde.

B. ST(0) ---> memorie FST mem32,64,80 FIST mem32,64,80 FBST mem32,64,80 FSTP mem32,64,80 FISTP mem32,64,80 FBSTP mem32,64,80

Efect: primele trei instructiuni copiaza registrul ST(0) la adresa de memoriespecificata, iar urmatoarele 3 (cu sufixul P) la fel insa, in plus face si ooperatie tip POP, in urma careia ST(1)->ST(0),.... ST(7)->ST(6). In primul caz(primele 3) stiva registrelor ramine neschimbata. Instructiunile de copierein memorie fac automat conversia din reprezentarea interna coprocesor inreprezentarea din memorie conform formatului rezervat (DW, DD sau DQ).

C. Instructiuni de incarcare constante- FLDZ (constanta 0), FLDPI(nr. PI), FLD1 (constanta 1), FLDL2T (log210),FLDL2E(log2e), FLDLG2(log102), FLDLN2(ln 2)Efect: acelasi efect ca si la A.

D. Interschimbare registre FXCH ST(0) <---> ST(1) FXCH ST(n) ST(0) <---> ST(n)

2. Instructiuni aritmetice

Obs.:- primul operand este destinatia, iar al II-lea este sursa !!- instr. cu sufixul "P" (deci, care fac si un POP) scot din stivadestinatia;- (n) este numarul de ordine al registrului de date coprocesor implicatin instructiune;- in principal numai destinatia este distrusa in urma operatiei, cuniste exceptii ce vor fi punctate in continuare !!

A. Adunare FADD (echiv. cu FADDP ST(1),ST(0)---- > ST(1)+ST(0)--> ST(1) +extragere din stiva astfel incit in final rezultatul ajunge in ST(0) (practicambii operanzi sint distrusi in final) FADD ST(n),ST---- > ST(n)+ST(0)--> ST(n) FADD ST,ST(n)---- > ST(0)+ST(n)--> ST(0) FADD mem32,64,80 ---> (mem)+ST(0)--> ST(0) FIADD mem32,64,80 ---> (mem)+ST(0)--> ST(0) FADDP ST(n),ST ---> ST(n)+ST(0)--> ST(n) + extragere din stiva sise muta si restul registrilor (vezi mai sus) - ambii operanzi sint distrusi;

B. Scadere - aceleasi tipuri de instructiuni ca la A, dar mnemonica este cuFSUB. (se scade sursa din destinatie, iar rezultatul intra in destinatie)

Observatie: FSUB (echiv. cu FSUBP ST(1),ST(0))---- > ST(1)-ST(0) ---> ST(1) +extragere din stiva astfel incit in final rezultatul ajunge in ST(0) - ambiioperanzi sint distrusi FSUB mem32,64,80 ----> ST(0)-(mem) ---> ST(0)B'. Scadere inversa - se scade destinatia din sursa, iar rezultatul intra indestinatie)

FSUBR (FSUBRP ST(1),ST(0))) ---- > ST(0)-ST(1) --> ST(1) +extragere din stiva astfel incit in final rezultatul ajunge in ST(0) FSUBR ST(n),ST---- > ST(0)-ST(n)--> ST(n) FSUBR ST,ST(n)---- > ST(n)-ST(0)--> ST(0) FSUBR mem32,64,80 ---> (mem)-ST(0)--> ST(0) (nr.din memorie este real) FISUBR mem32,64,80 ---> (mem)-ST(0)--> ST(0) (nr.din memorie esteintreg) FSUBRP ST(n),ST ---> ST(0)-ST(n)--> ST(n) + extragere din stiva sise muta si restul registrilor (vezi mai sus).

C. Inmultire - aceleasi tipuri de instructiuni ca la A. dar mnemonica este cuFMUL (comentariile ramin valabile !!)

D. Impartire - aceleasi tipuri de instructiuni ca la B. dar mnemonica este cuFDIV). Se imparte destinatia la sursa, iar rezultatul intra in destinatie)Obs.: aceleasi observatii ca la B. pentru mnemonicile cu 0 sau 1 operand.

D'. Impartire inversa - se imparte sursa la destinatie, iar rezultatul intrain destinatie. Se pastreaza mnemonicile si comentariile de la B',inlocuindu-seFSUBR cu FDIVR.

E. Comparare

FCOM (echiv. cu FCOM ST(1)) -- > ST : ST(1) FCOM ST(n)-- > ST : ST(n) FCOM mem32,64 -- > ST : (mem) - nr.reale FICOM mem16,32 -- > ST : (mem) - nr.intregi FTST-- > ST : 0

E'. Comparare si extragere din stiva

- aceleasi mnemonici ca la E. dar se adauga sufixul "P". In acest caz operatiade comparare este urmata de o operatie de extragere din stiva (tip POP). In locul ultimei instructiuni de la E. apare instructiunea:

FCOMPP ST(n) --> ST : ST(n) urmata de doua extrageri din stiva, astfelincit ambii operanzi sint distrusi.Observatie:

Rezultatul oricarei comparari permite luarea unei decizii, insa coprocesorulnu ofera instructiuni de salt. Solutia este utilizarea instructiunilor de saltale procesorului principal, astfel:-la 8086 fstswmem16 ;incarc reg. SW (starea) intr-o loc. ;memorie deja definita fwait ;ptr. sincro. movax,mem16 ;transfer in AX sahf ;incarc flag-uri cu AH

"Artificiul" acesta merge, intrucit bitul C3 sta pe pozitia lui ZF inPSW, C2 pe cea a lui PF, C1 pe a unui bit nedefinit, iar C0 pe cea a lui CF.

- flag-urile SF si AF vor primi valori nerelevante in urma acesteisecvente;- in ceea ce priveste pozitionarea indicatorilor C3..C0, reveniti laprezentarea registrului SW !!

- incepind cu 80286 avem instructiunea: FSTSW AX, care incarca DIRECT in AX,cuvintul de stare (SW), deci inlocuieste primele 3 instructiuni din secventaprecedenta. 3. Instructiuni transfer date control

FLDCW mem16 (mem)-->CW FaNiSTCW mem16 CW --->(mem) FaNiSTSW mem16 SW --->(mem) FLENV mem14*8 mediul DOS --> (mem) FaNiSTENV mem14*8 (mem) ---> mediul DOS FaNiSAVE mem94*8 salvez starea (registrii SW, CW, registrii de date ai coprocesorului etc. FRSTOR mem94*8 restaurez starea

Obs:- aNi - semnifica "NO WAIT" adica nu asteapta tratarea exceptiilor deeroare numerice nemascate !!- de remarcat (cum, era si de asteptat) starea (SW) pot numai sa ocitesc spre deosebire de cuv. de control (CW) pe care-l pot si "seta" la oanumita valoare !!- o utilizare a acestor instr. ar putea fi necesitatea salvarii stariiinainte de intrarea intr-o procdura si apoi restaurarea ei.

4. Instructiuni pentru calcule transcedente

FSIN sinaST(0)i---> ST(0) FCOS cosaST(0)i---> ST(0) FPTAN tanaST(0)i---> ST(0) FPATAN arctan(ST(0)-->ST(0) F2XM1 a2 ^ ST(0)i-1 ---> ST(0) FYL2X ST(1) * log2ST(0) --> ST(0) FYL2XP1 ST(1) * log2aST(0)+1i --> ST(0)

5. Alte instructiuni

FABS ABSaST(0)i ---> ST(0) FCHS- ST(0) ---> ST(0) FRNDINT INTaST(0)i ---> ST(0) FSQRT SQRTaST(0)i---> ST(0) FSCALE ST(0)* a2 ^ST(1)i ---> ST(0) FPREM ST(0) MOD ST(1)) ---> ST(0) (restul impartirii in ST) FXTRACT exponentaST(0)i ---> ST(0) si apoi impins in stiva FXAM pozitionare indicatoare de control functie de numarul din virful stivei (vezi SW)

6. Instructiuni ptr.controlul coprocesorului

FaNiINIT- initializare coprocesor FaNiCLEX- stergere exceptie erori numerice FINCSTP- adauga 1 la val. ST din SW FDECSTP- scade 1 din val. ST din SW FREE ST(n)- marcheaza ST(n) ca fiin gol FNOP- ST(0)---> ST(0), deci nu face nimic

Aplicatii:

Mod de lucru cu instructiunile coprocesor: - se lanseaza emulatorul EM87.COM cu EM87 /L;- se seteaza modul 8087 atit in PASCAL cit si in C (merge si Emulation);- la depanarea cu TD pentru vizualizarea registrilor 8087 se va alegeoptiunea "Numeric Processor" din submenu-ul VIEW.

1. Analizati programul AFPI.PAS si rutina aferenta AFPI.ASM care permiteafisarea numarului a.2. Analizati programul ARIE.C (sau ARIE.PAS) si rutinele aferenta ARIE.ASM siPI.ASM (respectiv AR1.ASM si PI.ASM) care calculeaza aria unui cerc.

3. Sa se calculeze frecventa de rezonanta a unui circuit LC serie(F=1/(2*PI*SQRT(L*C))), apelind din PASCAL (C) o functie in limbaj deasamblare care primeste L si C ca parametri tip single (float) (<=> DD inlimbaj de asamblare). Afisarea se va face in C (PASCAL)

Observatii importante !!

- se vor defini in rutina asamblare 2 variabile neinitializate ptr. L si Ccare vor fi incarcate cu parametri trimisi din programul in limbaj de nivelinalt prin metoda deja cunoscuta (??);- se va afisa in paralel si valoarea calculata DIRECT in programul principal(PASCAL sau C).

4. Sa se rezolve o ecuatie de gradul II folosind instructiunilecoprocesorului. Coeficientii (si afisarea solutiilor) vor fi trimisi (se vaface) dintr-un (in acelasi) program Csau PASCAL.

Observatie redundanta comuna !!

Rutinele in limbaj de asamblare vor folosi instructiunile coprocesorpentru calcule.


Colt dreapta
Creeaza cont
Comentarii:

Nu ai gasit ce cautai? Crezi ca ceva ne lipseste? Lasa-ti comentariul si incercam sa te ajutam.
Esti satisfacut de calitarea acestui document, eseu, cometariu? Apreciem aprecierile voastre.

Nume (obligatoriu):

Email (obligatoriu, nu va fi publicat):

Site URL (optional):


Comentariile tale: (NO HTML)


Noteaza documentul:
In prezent fisierul este notat cu: ? (media unui numar de ? de note primite).

2345678910

 
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite
Colt dreapta