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 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:13]
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] ​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] Î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] ​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] 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] 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] 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] ​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] 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] 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] 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