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-07 [2015/11/24 16:23] catalin.vasile3004 [[1p] 6. BONUS: Suma elementelor (cu semn) ale unui vector] |
laboratoare:laborator-07 [2015/11/24 16:34] catalin.vasile3004 [[1p] 8. BONUS: Îmbunătăţire înmulţiri cu 2] |
||
---|---|---|---|
Line 244: | Line 244: | ||
Recomandarea ar fi să folosiţi operanzi de tip dword (32 biţi) când nu vi se menţionează explicit, în exerciţiu, tipul acestora. | Recomandarea ar fi să folosiţi operanzi de tip dword (32 biţi) când nu vi se menţionează explicit, în exerciţiu, tipul acestora. | ||
</note> | </note> | ||
- | ==== [1p] 1. Împărţiri cu puteri ale lui 2 ==== | + | ==== [2p] 1. Împărţiri cu puteri ale lui 2 ==== |
Implementaţi împărţirea unui număr cu puteri ale lui 2 fără a folosi instrucţiunea **div**. Datele de input ale programului vor fi: numărul deîmpărţit şi puterea la care se ridică 2. | Implementaţi împărţirea unui număr cu puteri ale lui 2 fără a folosi instrucţiunea **div**. Datele de input ale programului vor fi: numărul deîmpărţit şi puterea la care se ridică 2. | ||
- | ==== [1p] 2. Increment flags ==== | + | ==== [2p] 2. Increment flags ==== |
Următorul cod îşi propune să incrementeze un byte dintr-un număr, cât timp acesta nu se resetează la 0, folosind instrucţiuni pe operanzi de 8 biţi. După o rulare se poate observa însă ca programul nu se execută cu ne-am aştepta, mai exact rămâne în buclă infinită. **Fără a modifica tipul operanzilor**, corectaţi linia din loop care face incrementarea astfel încât programul să se termine şi la finalizarea lui să se afişeze **512**. | Următorul cod îşi propune să incrementeze un byte dintr-un număr, cât timp acesta nu se resetează la 0, folosind instrucţiuni pe operanzi de 8 biţi. După o rulare se poate observa însă ca programul nu se execută cu ne-am aştepta, mai exact rămâne în buclă infinită. **Fără a modifica tipul operanzilor**, corectaţi linia din loop care face incrementarea astfel încât programul să se termine şi la finalizarea lui să se afişeze **512**. | ||
<file asm inc.asm> | <file asm inc.asm> | ||
Line 273: | Line 273: | ||
Implementaţi înmulţirea unui număr cu 2, fără a folosi instrucţiunea **mul**. | Implementaţi înmulţirea unui număr cu 2, fără a folosi instrucţiunea **mul**. | ||
<note important> | <note important> | ||
- | Numărul **trebuie** să aibă cel puţin 5 bytes în alcătuirea sa. | + | - Numărul **trebuie** să aibă cel puţin 5 bytes în alcătuirea sa. |
+ | - Trebuie să folosiţi instrucţiunea OR. | ||
</note> | </note> | ||
==== [2p] 4. Suma elementelor (fără semn) ale unui vector ==== | ==== [2p] 4. Suma elementelor (fără semn) ale unui vector ==== | ||
Line 351: | Line 352: | ||
ret | ret | ||
</file> | </file> | ||
+ | ==== [1p] 8. BONUS: Îmbunătăţire înmulţiri cu 2 ==== | ||
+ | [[http://www.jegerlehner.ch/intel/IntelCodeTable.pdf|Observaţi]] şi utilizaţi instrucţiunile de rotire cu Carry, în locul celor de tip AND si OR, pentru a rezolva exerciţiului 3. | ||
+ | ==== [1p] 9. BONUS: Generalizare înmulţiri cu puteri ale lui 2 ==== | ||
+ | Modificaţi exerciţiul 3 astfel încât numărul să se poată înmulţi cu o variaţie mai mare de puteri ale lui 2 (cu aceleaşi limitări ca la 3). | ||