User Tools

Site Tools


laboratoare:laborator-07

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
laboratoare:laborator-07 [2015/11/24 16:11]
catalin.vasile3004 [Împărţiri]
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>​
-1. 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.\\  +==== [2p] 1. Împărţiri cu puteri ale lui 2 ==== 
-2. 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**.+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. 
 +==== [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**.
 <file asm inc.asm> <file asm inc.asm>
 %include "​io.inc"​ %include "​io.inc"​
Line 268: Line 270:
 Uitaţi-vă ce FLAG-uri activeză instrucţiunea **[[http://​www.jegerlehner.ch/​intel/​IntelCodeTable.pdf|inc]]**. Uitaţi-vă ce FLAG-uri activeză instrucţiunea **[[http://​www.jegerlehner.ch/​intel/​IntelCodeTable.pdf|inc]]**.
 </​note>​ </​note>​
-3. Implementaţi înmulţirea unui număr cu 2, fără a folosi instrucţiunea **mul**.+==== [2p] 3. Înmulţirea cu 2 a unui număr mare/lung ==== 
 +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>​
-4. Pornind de la scheletul de cod următor, implementaţi suma elementelor ale unui vector folosind **registre de 8 biţi (obligatoriu)**:​+==== [2p] 4. Suma elementelor (fără semn) ale unui vector ==== 
 +Pornind de la scheletul de cod următor, implementaţi suma elementelor ale unui vector folosind **registre de 8 biţi (obligatoriu)**:​
 <file asm sum.asm> <file asm sum.asm>
 %include "​io.inc"​ %include "​io.inc"​
Line 289: Line 294:
     ret     ret
 </​file>​ </​file>​
-5. Scrieţi o secvenţă de cod astfel încât să înmulţiţi **nr1** cu **nr2** şi să depuneţi rezultat în variabila **result**. **Trebuie** să folosiţi registre de 8 biţi.+==== [2p] 5. Înmulţirea corectă a 2 numere de lungimi diferite ==== 
 +Scrieţi o secvenţă de cod astfel încât să înmulţiţi **nr1** cu **nr2** şi să depuneţi rezultat în variabila **result**. **Trebuie** să folosiţi registre de 8 biţi.
 <file asm mul.asm> <file asm mul.asm>
 %include "​io.inc"​ %include "​io.inc"​
Line 308: Line 314:
 </​file>​ </​file>​
  
-6. BONUS: Pornind de la scheletul de cod următor, implementaţi suma elementelor (**cu semn**) ale unui vector folosind **registre de 8 biţi (obligatoriu)**:​ +==== [1p] 6. BONUS: ​Suma elementelor (cu semn) ale unui vector ==== 
-<file asm signed_sum>​+Pornind de la scheletul de cod următor, implementaţi suma elementelor (**cu semn**) ale unui vector folosind **registre de 8 biţi (obligatoriu)**:​ 
 +<file asm signed_sum.asm>
 %include "​io.inc"​ %include "​io.inc"​
 section .data section .data
Line 325: Line 332:
     ret     ret
 </​file>​ </​file>​
-7. BONUS: Realizaţi împărţirea corectă a lui **nr1** la **nr2** folosind **registre de maxim 16 biţi**:+==== [1p] 7. BONUS: ​Împărţirea a 2 numere de lungimi diferite ==== 
 +Realizaţi împărţirea corectă a lui **nr1** la **nr2** folosind **registre de maxim 16 biţi**:
 <file asm div.asm> <file asm div.asm>
 %include "​io.inc"​ %include "​io.inc"​
Line 344: 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).
  
laboratoare/laborator-07.txt · Last modified: 2015/11/30 22:53 by razvan.deaconescu