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-05 [2015/11/11 08:50] razvan.deaconescu [[2p] 10. Bonus: Numărul de numere pare și impare dintr-un vector] |
laboratoare:laborator-05 [2015/11/11 14:45] razvan.deaconescu [[0.5p] 1. Tutorial: Înmulțire două numere reprezentate pe un octet] |
||
---|---|---|---|
Line 110: | Line 110: | ||
Atunci cănd facem înmulțire procesul este următorul, așa cum este descris și [[https://en.wikibooks.org/wiki/X86_Assembly/Arithmetic|aici]]: | Atunci cănd facem înmulțire procesul este următorul, așa cum este descris și [[https://en.wikibooks.org/wiki/X86_Assembly/Arithmetic|aici]]: | ||
- | - Plasăm înmulțitorul în registrul ''AL'' (pentru operații pe un byte), registrul ''AX'' (pentru operații pentru cuvânt - 16 biți, 2 octeți) și registrul ''EAX''' (pentru operații pe dublu cuvânt - 32 de biți, 4 octeți). | + | - Plasăm deînmulțitul în registrul de deînmulțit, adică: |
- | - Deînmulțitul este transmis ca argument mnemonicii ''mul''. | + | - 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 ''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''. | ||
+ | - Înmulțitorul este transmis ca argument mnemonicii ''mul''. Înmulțitorul trebuie să aibă aceeași dimensiune ca deînmulțitul. | ||
- Rezultatul este plasat în două registre (partea //high// și partea //low//). | - Rezultatul este plasat în două registre (partea //high// și partea //low//). | ||
Line 122: | Line 125: | ||
<note tip> | <note tip> | ||
Pentru înmulțirea numerelor de tip ''word'' (pe 16 biți), componentele sunt dispuse astfel: | Pentru înmulțirea numerelor de tip ''word'' (pe 16 biți), componentele sunt dispuse astfel: | ||
- | * În registrul ''AX'' se plasează înmulțitorul. | + | * În registrul ''AX'' se plasează deînmulțitul. |
- | * Argumentul instrucțiunii ''mov'' (posibil un alt registru) este pe 16 biți (fie valoare fie un registru precum ''BX'', ''CX'', ''DX''). | + | * Argumentul instrucțiunii, înmulțitorul, ''mul'' (posibil un alt registru) este pe 16 biți (fie valoare fie un registru precum ''BX'', ''CX'', ''DX''). |
* Rezultatul înmulțirii este dispus în perechea ''DX:AX'', adică partea "high" a rezultatului în registrul ''DX'', iar partea "low" a rezultatului în registrul ''AX''. | * Rezultatul înmulțirii este dispus în perechea ''DX:AX'', adică partea "high" a rezultatului în registrul ''DX'', iar partea "low" a rezultatului în registrul ''AX''. | ||
+ | |||
+ | Pentru înmulțirea numerelor de tip ''dword'' (pe 32 biți), componentele sunt dispuse astfel: | ||
+ | * În registrul ''EAX'' se plasează deînmulțitul. | ||
+ | * Argumentul instrucțiunii, înmulțitorul, ''mul'' (posibil un alt registru) este pe 32 biți (fie valoare fie un registru precum ''EBX'', ''ECX'', ''EDX''). | ||
+ | * Rezultatul înmulțirii este dispus în perechea ''EDX:EAX'', adică partea "high" a rezultatului în registrul ''EDX'', iar partea "low" a rezultatului în registrul ''EAX''. | ||
</note> | </note> | ||
+ | <note> | ||
+ | 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 ''EDX'' și ''AAX'' pentru înmulțirea numerelor de tip ''dword''. | ||
+ | |||
+ | </note> | ||
==== [1p] 3. Ridicare număr la puterea a treia ==== | ==== [1p] 3. Ridicare număr la puterea a treia ==== | ||