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:24] catalin.vasile3004 [[1p] 1. Împărţiri cu puteri ale lui 2] |
laboratoare:laborator-07 [2015/11/25 08:58] catalin.vasile3004 [[2p] 1. Împărţiri cu puteri ale lui 2] |
||
---|---|---|---|
Line 246: | Line 246: | ||
==== [2p] 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 ==== | + | <note tip>Instrucţiunile **shl** şi **shr** pot folosi registrul **CL** pentru a specifica numărul de shiftări.</note> |
+ | ==== [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 274: | ||
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 353: | ||
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). | ||