This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
laboratoare:laborator-05 [2015/11/11 14:45] razvan.deaconescu [[2p] 2. Înmulțire două numere] |
laboratoare:laborator-05 [2016/01/09 18:27] (current) razvan.deaconescu [[2p] 10. Bonus: Numărul de numere pare și impare dintr-un vector] |
||
---|---|---|---|
Line 112: | Line 112: | ||
- Plasăm deînmulțitul în registrul de deînmulțit, adică: | - Plasăm deînmulțitul în registrul de deînmulțit, adică: | ||
- dacă facem operații pe un byte (8 biți, un octet), plasăm deînmulțitul în registrul ''AL''; | - dacă facem operații pe un byte (8 biți, un octet), plasăm deînmulțitul în registrul ''AL''; | ||
- | - dacă facem operații pe un cuvânt (16 biți, 2 octeți, plasăm deînmulțitul în registrul ''AZ''; | + | - dacă facem operații pe un cuvânt (16 biți, 2 octeți, plasăm deînmulțitul în registrul ''AX''; |
- dacă facem operații pe un dublu cuvânt (32 de biți, 4 octeți), plasăm deînmulțitul în registrul ''EAX''. | - dacă facem operații pe un dublu cuvânt (32 de biți, 4 octeți), plasăm deînmulțitul în registrul ''EAX''. | ||
- Înmulțitorul este transmis ca argument mnemonicii ''mul''. Înmulțitorul trebuie să aibă aceeași dimensiune ca deînmulțitul. | - Înmulțitorul este transmis ca argument mnemonicii ''mul''. Înmulțitorul trebuie să aibă aceeași dimensiune ca deînmulțitul. | ||
Line 139: | Line 139: | ||
La afișarea rezultatului folosiți două instrucțiunii ''PRINT_UDEC'' pentru a afișa cele două registre care conțin rezultatul: | La afișarea rezultatului folosiți două instrucțiunii ''PRINT_UDEC'' pentru a afișa cele două registre care conțin rezultatul: | ||
* Registrele ''DX'' și ''AX'' pentru înmulțirea numerelor de tip ''word''. | * Registrele ''DX'' și ''AX'' pentru înmulțirea numerelor de tip ''word''. | ||
- | * Registrele ''EDX'' și ''AAX'' pentru înmulțirea numerelor de tip ''dword''. | + | * Registrele ''EDX'' și ''EAX'' pentru înmulțirea numerelor de tip ''dword''. |
</note> | </note> | ||
Line 167: | Line 167: | ||
<note tip> | <note tip> | ||
- | Registrele ''eax'' și ''edx'' le veți folosi la înmulțirea pentru ridicarea la putere (în instrucțiunea ''mul''). Pentru a reține suma pătratelor aveți două variante: | + | Registrele ''eax'' și ''edx'' le veți folosi la înmulțirea pentru ridicarea la putere (în instrucțiunea ''mul''). Astfel că nu veți mai putea folosi (ușor) registrul ''eax'' pentru stocarea sumei pătratelor. Pentru a reține suma pătratelor aveți două variante: |
- (mai simplu) Folosiți registrul ''ebx'' pentru a reține suma pătratelor. | - (mai simplu) Folosiți registrul ''ebx'' pentru a reține suma pătratelor. | ||
- (mai complicat) Înainte de a opera registrul ''eax'' salvați valoarea sa pe stivă (folosind instrucțiunea ''push''), apoi faceți operațiile necesare și apoi restaurați valoarea salvată (folosind instrucțiunea ''pop''). | - (mai complicat) Înainte de a opera registrul ''eax'' salvați valoarea sa pe stivă (folosind instrucțiunea ''push''), apoi faceți operațiile necesare și apoi restaurați valoarea salvată (folosind instrucțiunea ''pop''). | ||
Line 252: | Line 252: | ||
Pentru testare folosiți un vector doar cu numere pozitive. Pentru numere negative trebuie să faceți extensie de semn; ar merge și fără pentru că ne interesează doar restul, dar nu am fi riguroși :-) | Pentru testare folosiți un vector doar cu numere pozitive. Pentru numere negative trebuie să faceți extensie de semn; ar merge și fără pentru că ne interesează doar restul, dar nu am fi riguroși :-) | ||
</note> | </note> | ||
+ | |||
+ | ===== Soluții ===== | ||
+ | |||
+ | [[http://elf.cs.pub.ro/asm/res/laboratoare/lab-05-sol.zip|Soluții de referință pentru exercițiile de laborator]] | ||
+ |