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/25 10:03]
catalin.vasile3004
laboratoare:laborator-07 [2015/11/25 12:03]
catalin.vasile3004 [Adunare. Optimizare.]
Line 82: Line 82:
     ; loop code:     ; loop code:
 for: for:
-    mov al, byte [A + ecx] ; get a digit from A +    mov al, dword [A + ecx] ; get a digit from A 
-    adc al, byte [B + ecx] ; AL = A + B + Carry+    adc al, dword [B + ecx] ; AL = A + B + Carry
     mov [result + ecx], al ; store result     mov [result + ecx], al ; store result
     inc ecx     inc ecx
Line 109: Line 109:
     ; loop code:     ; loop code:
 for: for:
-    mov eax, byte [A + ecx*4] ; get a digit from A +    mov eax, dword [A + ecx*4] ; get a digit from A 
-    adc eax, byte [B + ecx*4] ; AL = A + B + Carry+    adc eax, dword [B + ecx*4] ; AL = A + B + Carry
     mov [result + ecx*4], eax ; store result     mov [result + ecx*4], eax ; store result
     inc ecx     inc ecx
Line 271: Line 271:
 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>​
-==== [2p] 3. Suma elementelor (fără semn) ale unui vector ​==== +==== [2p] 3. Înmulţirea corectă a 2 numere de lungimi diferite ​==== 
-Pornind de la scheletul ​de cod următor, implementaţi suma elementelor ale unui vector folosind ​**registre de 8 biţi (obligatoriu)**:​ +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 sum.asm>+<file asm mul.asm>
 %include "​io.inc"​ %include "​io.inc"​
 section .data section .data
-    ​v: dB 1256, 93, 44, 55, 23, 44, 71, 43 +    ​nr1: dB 0x900x02 ; =656 
-    ​lendd $-v +    ​nr2dB 0x04 
-    ​sumdW 0+    ​resultdw 0
 section .text section .text
 global CMAIN global CMAIN
 CMAIN: CMAIN:
-    ; TODO sum vector of BYTE elements into "sum" ​WORD variable+    ; TODO multiply nr1 by nr2 using only 8bit registers 
 +    ;      store the result in the "result" variable
     ​     ​
-    PRINT_UDEC 2, sum ; should be 441 if result is correct+    PRINT_UDEC 2, result ​; should be 2624
     ​     ​
     xor eax, eax     xor eax, eax
     ret     ret
 </​file>​ </​file>​
-==== [2p] 4. Înmulţirea corectă a 2 numere de lungimi diferite ​==== +==== [2p] 4. Suma elementelor (fără semn) ale unui vector ​==== 
-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. +Pornind de la scheletul ​de cod următor, implementaţi suma elementelor ale unui vector folosind ​**registre de 8 biţi (obligatoriu)**:​ 
-<file asm mul.asm>+<file asm sum.asm>
 %include "​io.inc"​ %include "​io.inc"​
 section .data section .data
-    ​nr1: dB 0x900x02 ; =656 +    ​v: dB 1256, 93, 44, 55, 23, 44, 71, 43 
-    ​nr2dB 0x04 +    ​lendd $-v 
-    ​resultdw 0+    ​sumdW 0
 section .text section .text
 global CMAIN global CMAIN
 CMAIN: CMAIN:
-    ; TODO multiply nr1 by nr2 using only 8bit registers +    ; TODO sum vector of BYTE elements into "sum" ​WORD variable
-    ;      store the result in the "result" variable+
     ​     ​
-    PRINT_UDEC 2, result ​; should be 2624+    PRINT_UDEC 2, sum ; should be 441 if result is correct
     ​     ​
     xor eax, eax     xor eax, eax
Line 354: Line 354:
 </​file>​ </​file>​
 ==== [1p] 8. BONUS: Îmbunătăţire înmulţiri cu 2 ==== ==== [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.+[[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 ​5.
 ==== [1p] 9. BONUS: Generalizare înmulţiri cu puteri ale lui 2 ==== ==== [1p] 9. BONUS: Generalizare înmulţiri cu puteri ale lui 2 ====
-Modificaţi exerciţiul ​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).+Modificaţi exerciţiul ​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 5).
  
laboratoare/laborator-07.txt · Last modified: 2015/11/30 22:53 by razvan.deaconescu