User Tools

Site Tools


laboratoare:laborator-05

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-05 [2015/11/11 08:04]
razvan.deaconescu [Tutorial: Suma elementelor dintr-un vector reprezentate pe un octet]
laboratoare:laborator-05 [2015/11/11 08:17]
razvan.deaconescu
Line 92: Line 92:
 <​code>​ <​code>​
  
-mov BYTE PTR [ebx], 2  ; Move 2 into the single byte at memory location EBX +mov byte [ebx], 2  ; Move 2 into the single byte at memory location EBX 
-mov WORD PTR [ebx], 2  ; Move the 16-bit integer representation of 2 into the 2 bytes starting at+mov word [ebx], 2  ; Move the 16-bit integer representation of 2 into the 2 bytes starting at
                        ; address EBX                        ; address EBX
-mov DWORD PTR [ebx], 2 ; Move the 32-bit ​+mov dword [ebx], 2 ; Move the 32-bit ​
  
 </​code>​ </​code>​
Line 105: Line 105:
 Descărcați arhiva, decomprimați-o și accesați directorul aferent. Descărcați arhiva, decomprimați-o și accesați directorul aferent.
  
-==== Tutorial: Înmulțire două numere reprezentate pe un octet ====+==== [0.5p] 1. Tutorial: Înmulțire două numere reprezentate pe un octet ====
  
 Parcurgeți rulați și testați codul  din fișierul ''​multiply.asm''​. În cadrul programului înmulțim două numere definite ca octeți. Pentru a le aputea accesa folosimo construcție de tipul ''​byte [register]''​. Parcurgeți rulați și testați codul  din fișierul ''​multiply.asm''​. În cadrul programului înmulțim două numere definite ca octeți. Pentru a le aputea accesa folosimo construcție de tipul ''​byte [register]''​.
Line 116: Line 116:
 Testați programul. Încercați alte valori pentru ''​num1''​ și ''​num2''​. Testați programul. Încercați alte valori pentru ''​num1''​ și ''​num2''​.
  
-==== Înmulțire două numere ====+==== [2p] 2. Înmulțire două numere ====
  
 Actualizați zona marcată cu ''​TODO''​ în fișierul ''​multiply.asm''​ pentru a permite înmulțirea și a numelor de tip ''​word''​ și ''​dword'',​ adică ''​num1_dw''​ cu ''​num2_dw'',​ respectiv ''​num1_dd''​ și ''​num2_dd''​. Actualizați zona marcată cu ''​TODO''​ în fișierul ''​multiply.asm''​ pentru a permite înmulțirea și a numelor de tip ''​word''​ și ''​dword'',​ adică ''​num1_dw''​ cu ''​num2_dw'',​ respectiv ''​num1_dd''​ și ''​num2_dd''​.
Line 128: Line 128:
 </​note>​ </​note>​
  
-==== Ridicare număr la puterea a treia ====+==== [1.5p] 3. Ridicare număr la puterea a treia ====
  
 Realizați un program în limbajul de asamblare care ridică un număr la puterea a treia (adică ''​num * num * num''​). Realizați un program în limbajul de asamblare care ridică un număr la puterea a treia (adică ''​num * num * num''​).
Line 138: Line 138:
 Nu definiți un număr foarte mare, pentru a putea fi vizualizat rezultatul înmulțirii în registrul ''​eax''​. Nu definiți un număr foarte mare, pentru a putea fi vizualizat rezultatul înmulțirii în registrul ''​eax''​.
  
-==== Tutorial: Suma elementelor dintr-un vector reprezentate pe un octet ====+==== [0.5] 4. Tutorial: Suma primelor N numere naturale ​====
  
 În programul ''​sum_n.asm''​ din [[http://​elf.cs.pub.ro/​asm/​res/​laboratoare/​lab-05-tasks.zip|arhiva laboratorului]] este calculată suma primelor ''​num''​ numere naturale. În programul ''​sum_n.asm''​ din [[http://​elf.cs.pub.ro/​asm/​res/​laboratoare/​lab-05-tasks.zip|arhiva laboratorului]] este calculată suma primelor ''​num''​ numere naturale.
Line 148: Line 148:
 </​note>​ </​note>​
  
-==== Suma pătratelor ​primelo ​N numere naturale ====+==== [1p] 5. Suma pătratelor ​primelor ​N numere naturale ====
  
 Porniți de la programul ''​sum_n.asm''​ și creați un program ''​sum_n_square.asm''​ care să calculeze suma pătratelor primelor ''​num''​ numere naturale. Porniți de la programul ''​sum_n.asm''​ și creați un program ''​sum_n_square.asm''​ care să calculeze suma pătratelor primelor ''​num''​ numere naturale.
  
-==== Tutorial: Suma elementelor dintr-un vector reprezentate pe un octet ====+==== [0.5] 6. Tutorial: Suma elementelor dintr-un vector reprezentate pe un octet ====
  
 În programul ''​sum_array.asm''​ din [[http://​elf.cs.pub.ro/​asm/​res/​laboratoare/​lab-05-tasks.zip|arhiva laboratorului]] este calculată suma elementelor unui vector (//array//) de octeți (//bytes//, reprezentare pe 8 biți). În programul ''​sum_array.asm''​ din [[http://​elf.cs.pub.ro/​asm/​res/​laboratoare/​lab-05-tasks.zip|arhiva laboratorului]] este calculată suma elementelor unui vector (//array//) de octeți (//bytes//, reprezentare pe 8 biți).
Line 162: Line 162:
 </​note>​ </​note>​
  
- +==== [2.5p] 7. Suma elementelor dintr-un vector ====
-==== Suma elementelor dintr-un vector ====+
  
 În zona marcată cu ''​TODO''​ din fișierul ''​sum_array.asm''​ completați codul pentru a realiza suma vectorilor cu elemente de tip word (16 biți) și de tip dword (32 de biți); este vorba de vectorii ''​word_array''​ și ''​dword_array''​. În zona marcată cu ''​TODO''​ din fișierul ''​sum_array.asm''​ completați codul pentru a realiza suma vectorilor cu elemente de tip word (16 biți) și de tip dword (32 de biți); este vorba de vectorii ''​word_array''​ și ''​dword_array''​.
Line 185: Line 184:
  
 </​note>​ </​note>​
-==== Suma pătratelor elementelor dintr-un vector ==== 
  
-TODO+==== [1.5p] 8. Suma pătratelor elementelor dintr-un vector ====
  
-==== Numărul ​de numere negative șpozitive ​dintr-un vector ​====+Pornind ​de la programul de la exercițiul anterior, calculațsuma pătratelor elementelor ​dintr-un vector. Puteți folosi vectorul ''​dword_array''​ dar ar trebui să fie mai mici valorile elementelor ca să nu treacă pătratele valorilor acestora de reprezentarea pe 32 de biți.
  
-TODO+==== [1.5p] 9. Bonus: Numărul de numere negative și pozitive dintr-un vector ====
  
-==== Numărul de numere ​pare și impare ​dintr-un vector ​====+Creați un program care afișează numărul de numere ​negative, respectiv numărul de numere pozitive ​dintr-un vector.
  
-TODO+<​note>​ 
 +Definiți un vector care să conțină atât numere negative cât și numare pozitive. 
 +</​note>​ 
 + 
 +<note tip> 
 +Folosiți intrucțiunea ''​cmp''​ și mnemonici de salt condițional. Urmăriți detalii [[https://​en.wikibooks.org/​wiki/​X86_Assembly/​Control_Flow|aici]]. 
 +</​note>​ 
 + 
 +==== [1.5p] 10. Bonus: Numărul de numere pare și impare dintr-un vector ==== 
 + 
 +Creați un program care afișează numărul de numere pare, respectiv numărul de numere impare dintr-un vector. 
 + 
 +<note tip> 
 +Puteți folosi instrucțiunea ''​div''​ pentru a împărți un număr la ''​2''​ și pentru a compara apoi restul împărțirii cu '''​0''​. Urmăriți detalii [[https://​en.wikibooks.org/​wiki/​X86_Assembly/​Arithmetic|aici]]. 
 +</​note>​
laboratoare/laborator-05.txt · Last modified: 2016/01/09 18:27 by razvan.deaconescu