PopaLepo

Coprocesorul Matematic Assembly

Apr 15th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.92 KB | None | 0 0
  1. Coprocesorul se initializeaza odata cu activarea semnalului RESET, generat in sistemul de calcul.
  2. In interiorul coprocesorului avem o memorie de 80 de octeti organizata sub forma unei stive de opt elemente de 10 octeti ecare.
  3.  
  4. Deci cu ajutorul coprocesorului putem efectua urmatoarele operatii:
  5.  
  6. 1) citirea datelor in memoria interna a coprocesorului (pe stiva) din memoria calculatorului.
  7. 2) efectuarea operatiilor aritmetice necesare.
  8. 3) scrierea rezultatului in memoria calculatorului.
  9.  
  10. Tipurile de date in virgula flotanta sunt:
  11. 1) Real scurt, reprezentat pe 32 bit (1 bit de semn, 23 bit mantisa, 8 bit caracteristica)
  12. 2) Real lung, reprezentat pe 64 bit (1 bit de semn, 52 bit mantisa, 11 bit caracteristica)
  13. 3) Real cu precizie ridicata, reprezentat pe 80 bit (1 bit de semn, 64 bit mantisa, 15 bit caracteristica)
  14.  
  15. Proiectantii coprocesorului au clasi cat erorile in urmatoarele 6 clase:
  16.  
  17. 1) Invalid operation: operatie invalida.
  18.  
  19. depasire superioara sau inferioara a stivei interioare a coprocesorului. (impartire la 0 , adunare/scadere la infinit)
  20.  
  21. 2) Overflow: depasire superioara.
  22.  
  23. Rezultatul depaseste numarul cel mai mare ce se poate reprezenta. Coprocesorul inscrie in finit in locul rezultatului si continua lucrul.
  24.  
  25. 3) Zero Divizor: impartire cu zero.
  26.  
  27. Impartitorul impartirii de efectuat este zero, iar deimpartitul nu este zero sau in nit.
  28.  
  29. 4) Underflow: depasire inferioara
  30.  
  31. Valoarea rezultatulu in modul este mai mica decat numarul cel mai mic reprezentabil.
  32. Rezultatul va zero, coprocesorul continua lucrul.
  33.  
  34. 5) Denormalized: operand nenormalizat.
  35.  
  36. 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).
  37.  
  38. 6) Inexact result: rezultat inexact.
  39.  
  40. Rezultatul operatiei este inexact din cauza unor rotunjiri prescrise sau necesare.
  41. Putem avea astfel de rezultate dupa impartire, daca impartim de exemplu 2.0 cu
  42. 3.0 rezultatul se poate reprezenta doar ca o fract,ie in finita.
  43.  
  44. Instructiuni de transfer de date
  45.  
  46. Instructiuni de incarcare (LOAD)
  47.  
  48. 1) fild adr - Incarca pe stiva variabila intreaga de la adresa adr.
  49. 2) fld adr - Incarca pe stiva valoarea reala (scurta sau lunga) de la adresa de memorie adr.
  50. 3) fbld adr - Incarca pe stiva variabila din memorie de tipul zecimal impachetat (de finit cu DT) de la adresa de memorie adr.
  51.  
  52. Instructiuni de memorare (STORE)
  53.  
  54. 1) fist adr - Memoreaza la adresa adr valoarea de pe stiva (ST(0)) ca numar. INDICATORUL NU SE MODIFICA.
  55. 2) fistp adr - Memoreaza la adresa adr valoarea de pe stiva (ST(0)) ca numar intreg.
  56. Instructiunea afecteaza stiva: ST(0) este eliminat prin decrementarea indicatorului de stiva.
  57.  
  58. 3) fst adr - Memoreaza la adresa adr valoarea de pe stiva (ST(0)) ca numar intreg. INDICATORUL NU SE MODIFICA
  59. 4) fstp adr - Memoreaza la adresa adr valoarea de pe stiva (ST(0)) ca numar in reprezentarea in virgula mobila.
  60. ST(0) este eliminat prin decrementarea indicatorului de stiva.
  61.  
  62. 5) fbstp adr - Memoreaza la adresa adr valoarea de pe stiva (ST(0)) ca numar zecimal impachetat.
  63.  
  64. Instructiuni transfer de date intern
  65.  
  66. 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).
  67.  
  68. 2) fst ST(i) - Valoarea din ST(0) este copiata in elementul i din stiva. Valoarea veche din ST(i) se pierde.
  69.  
  70. 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.
  71.  
  72. 4) fxchg ST(i) - Se schimba intre ele ST(0) si ST(i)
  73.  
  74. Instructiuni incarcare a constantelor
  75.  
  76. 1) fldz - Zero pe varful stivei.
  77. 2) fld1 - 1.0 pe varful stivei.
  78. 3) fldpi - Pi pe varful stivei.
  79. 4) fldl2t - log{2}{10} pe varful stivei.
  80. 5) fldl2e - log{2}{e} pe varful stivei.
  81. 6) fldlg2 - lg2 pe varful stivei.
  82. 7) fldln2 - ln2 pe varful stivei.
  83.  
  84. Instructiuni aritmetice
  85.  
  86. ST(i) - registrul numarul i al coprocesorului matematic
  87.  
  88. m32fp - o variabila pe 32 bit (declarata ca DD) ce retine un numar in virgula mobila. (fp - Floating Point)
  89. m64fp - o variabila pe 64 bit (declarata ca DQ) ce retine un numar in virgula mobila. (fp - Floating Point)
  90. m16int - o variabila pe 16 bit (declarata ca DW) ce retine un numar intreg.
  91. m32int - o variabila pe 32 bit (declarata ca DD) ce retine un numar intreg.
  92.  
  93. f<op> ST(0) <- ST(0) op ST(1)
  94. f<op> m32fp ST(0) <- ST(0) op ST(1) op m32fp
  95. f<op> ST(0), ST(i) ST(0) <- ST(0) op ST(i)
  96. f<op> ST(i), ST(0) ST(i) <- ST(i) op ST(0)
  97. f<op>p ST(1) <- ST(1) op ST(0), elimina ST(0)
  98. f<op>p ST(i), ST(0) ST(i) <- ST(i) op ST(0), elimina ST(0)
  99. fi<op> m32int ST(0) <- ST(0) op m32int
  100.  
  101. 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):
  102.  
  103. Instructiuni pentru compararea valorilor numerice
  104.  
  105. fcom compara registrii ST(0) si ST(1). Varianta cu un operand compara registrul ST(0) cu operandul dat.
  106. fcomp este identica cu fcom, realizand in plus eliminarea registrului ST(0).
  107. fcompp elimina atat registul ST(0) cat si registrul ST(1).
  108. ftst compara registul ST(0) cu 0.0
  109.  
  110. Functii in virgula mobila
  111.  
  112. fsqrt ST(0) <- sqrt(ST(0))
  113. fscale ST(0) <- ST(0) x 2^(ST(1))
  114. fprem ST(0) <- ST(0) mod ST(1)
  115. fabs ST(0) <- |ST(0)|
  116. fchs ST(0) <- -ST(0)
  117. fptan ST(0) <- tan(ST(0))
  118.  
  119. Instructiuni de comanda
  120.  
  121. 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.
  122.  
  123. fldcw adr - Se incarca in registrul de comanda cuvantul de la adresa adr in memorie.
Add Comment
Please, Sign In to add comment