This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
laboratoare:laborator-12 [2016/01/13 16:49] razvan.deaconescu [[1p] 2. Media unui vector de numere fracționare] |
laboratoare:laborator-12 [2016/01/15 18:57] razvan.deaconescu [Instrucțiuni de comparație] |
||
---|---|---|---|
Line 15: | Line 15: | ||
Pentru a reprezenta valorile fracționare vom folosi **Reprezentarea în virgulă mobilă** (**Floating Point Representation**). În această reprezentare, numerele au următoarea structură: | Pentru a reprezenta valorile fracționare vom folosi **Reprezentarea în virgulă mobilă** (**Floating Point Representation**). În această reprezentare, numerele au următoarea structură: | ||
- | {{:laboratoare:lab12-equation1.png?500|}} | + | {{ :laboratoare:lab12-equation1.png?500 |}} |
După cum putem observa mai sus, valorile trebuie transformate astfel încât partea întreagă să fie 1. Această formă poartă | După cum putem observa mai sus, valorile trebuie transformate astfel încât partea întreagă să fie 1. Această formă poartă | ||
Line 21: | Line 21: | ||
În forma binară, valorile se reprezintă astfel: | În forma binară, valorile se reprezintă astfel: | ||
- | {{:laboratoare:2000px-ieee_754_double_floating_point_format.png?600|}} | + | {{ :laboratoare:2000px-ieee_754_double_floating_point_format.png?600 |}} |
**Semnul** este dat de primul bit din reprezentarea binară: 1 = negativ, 0 = pozitiv.\\ | **Semnul** este dat de primul bit din reprezentarea binară: 1 = negativ, 0 = pozitiv.\\ | ||
Line 33: | Line 33: | ||
Cele mai folosite standarde de reprezentare în virgulă mobilă sunt cu precizie simplă (**Single Precision**) și cu precizie dublă (**Double Precision**). | Cele mai folosite standarde de reprezentare în virgulă mobilă sunt cu precizie simplă (**Single Precision**) și cu precizie dublă (**Double Precision**). | ||
- | Reprezentarea cu **precizie simplă** presupune folosirea a 32 de biți și corespunde valorilor float din limbajul C. În acest caz baza folosită este 2, exponentul are 8 biți, iar restul de 23 de biți corespund exponentului. | + | Reprezentarea cu **precizie simplă** presupune folosirea a 32 de biți și corespunde valorilor float din limbajul C. În acest caz baza folosită este 2, exponentul are 8 biți, iar restul de 23 de biți corespund mantisei. |
- | Reprezentarea cu **precizie dublă** presupune folosirea a 64 de biți și corespunde valorilor de tip double. În acest caz, baza este 2, exponentul are 11 biți, iar ultimii 52 de biți sunt folosiți pentru exponent. | + | Reprezentarea cu **precizie dublă** presupune folosirea a 64 de biți și corespunde valorilor de tip double. În acest caz, baza este 2, exponentul are 11 biți, iar restul de 52 de biți corespund mantisei. |
<note> | <note> | ||
În ambele cazuri, exponentul folosit în calcul nu este cel extras din numărul în forma binară, ci este calculat astfel: | În ambele cazuri, exponentul folosit în calcul nu este cel extras din numărul în forma binară, ci este calculat astfel: | ||
- | * În precizie simplă, exponentul este dat de valoarea (exponentul pe 23 de biți) - 127 | + | * În precizie simplă, exponentul este dat de valoarea ''(exponentul pe 8 de biți) - 127'' (adică se scade o valoare fixă din valoarea efectivă a exponentului) |
- | * În precizie dublă, exponentul este dat de valoarea (exponentul pe 52 de biți) - 1023 | + | * În precizie dublă, exponentul este dat de valoarea ''(exponentul pe 11 de biți) - 1023'' (adică se scade o valoare fixă din valoarea efectivă a exponentului) |
</note> | </note> | ||
Line 77: | Line 77: | ||
^ Instrucțiune ^ Descriere ^ | ^ Instrucțiune ^ Descriere ^ | ||
- | | fstp DWORD [registru] | Citește o valoare de tip float (8 octeți) din vârful stivei și o salvează la adresa indicată de registru. Valoarea este eliminată de pe stivă. | | + | | fstp DWORD [registru] | Citește o valoare de tip float (4 octeți) din vârful stivei și o salvează la adresa indicată de registru. Valoarea este eliminată de pe stivă. | |
| fst DWORD [registru] | Similar cu instrucțiunea anterioară, dar valoarea rămâne în vârful stivei. | | | fst DWORD [registru] | Similar cu instrucțiunea anterioară, dar valoarea rămâne în vârful stivei. | | ||
| fstp QWORD [registru] | Citește o valoare de tip double (8 octeți) din vârful stivei și o salvează la adresa indicată de registru, eliminând valoarea de pe stivă | | | fstp QWORD [registru] | Citește o valoare de tip double (8 octeți) din vârful stivei și o salvează la adresa indicată de registru, eliminând valoarea de pe stivă | | ||
Line 91: | Line 91: | ||
| ficom word [registru] | Compara prima valoare de pe stivă cu un număr întreg pe 2 octeți de la adresa indicată de registru | | | ficom word [registru] | Compara prima valoare de pe stivă cu un număr întreg pe 2 octeți de la adresa indicată de registru | | ||
| ficom dword [registru] | Compară prima valoare de pe stivă cu un număr întreg pe 4 octeți de la adresa indicată de registru | | | ficom dword [registru] | Compară prima valoare de pe stivă cu un număr întreg pe 4 octeți de la adresa indicată de registru | | ||
- | | ficomp dword [registru] | Compară prima valoare de pe stivă cu un număr întreg pe 2 octeți de la adresa indicată de registru | | + | | ficom qword [registru] | Compară prima valoare de pe stivă cu un număr întreg pe 8 octeți de la adresa indicată de registru | |
- | | ficomp dword/word [registru] | Similar cu instrucțiunile anterioare, dar elimină și prima valoare de pe stivă | | + | | ficomp word/dword/qword [registru] | Similar cu instrucțiunile anterioare, dar elimină și prima valoare de pe stivă | |
| ftst | Compară prima valoare de pe stivă cu 0.0. | | | ftst | Compară prima valoare de pe stivă cu 0.0. | | ||
Line 220: | Line 220: | ||
==== [1p] 1. Tutorial: Suma unui vector de numere fracționare ==== | ==== [1p] 1. Tutorial: Suma unui vector de numere fracționare ==== | ||
- | În fișierul ''suma.asm'' din directorul ''ex1'' găsiți un exemplu de adunare a valorilor dintr-un vector de numere fracționare. La final, rezultatul este afișat folosind ''printf''. | + | În fișierul ''suma.asm'' din subdirectorul ''ex1/'' găsiți un exemplu de adunare a valorilor dintr-un vector de numere fracționare. La final, rezultatul este afișat folosind funcția ''printf''. |
Parcurgeți și înțelegeți exemplul dat. Deschideți-l folosind SASM și rulați-l. | Parcurgeți și înțelegeți exemplul dat. Deschideți-l folosind SASM și rulați-l. |