User Tools

Site Tools


laboratoare:laborator-06

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
laboratoare:laborator-06 [2015/11/18 15:24]
razvan.deaconescu [[2p] 6. Prelucrare a unei structuri]
laboratoare:laborator-06 [2016/01/09 18:27] (current)
razvan.deaconescu [[1p] 11. Bonus: Dump pe zona de cod a procesului curent]
Line 412: Line 412:
   * grupa să fie ''​323CA''​   * grupa să fie ''​323CA''​
  
 +<note warning>
 +Nu modificați ce se afișează, modificați codul structurii. Nu vă atingeți de codul de afișare, acel cod trebuie să rămână același. Trebuie să adăugați la începutul funcției main, în locul marcat cu ''​TODO''​ codul pentru modificarea structurii.
 +</​note>​
  
 <note warning> <note warning>
Line 455: Line 458:
 </​code>​ </​code>​
 unde ''<​index>''​ este index-ul unde vrem să scriem în cadrul șirului, iar ''<​character>''​ este caracterul pe ca vrem să îl scriem. unde ''<​index>''​ este index-ul unde vrem să scriem în cadrul șirului, iar ''<​character>''​ este caracterul pe ca vrem să îl scriem.
 +</​note>​
 +
 +<note important>​
 +Pentru câmpul ''​gender''​ folosiți valoarea ''​1''​ sau ''​2''​ (octet).
 </​note>​ </​note>​
 ==== [1p] 7. Tutorial: Populare a unui vector de structuri ==== ==== [1p] 7. Tutorial: Populare a unui vector de structuri ====
Line 464: Line 471:
 Actualizați programul de mai sus astfel încât vectorul de structuri să nu mai fie o variabilă globală neinițilizată (în ''​.bss''​) ci să fie alocat pe stivă. Actualizați programul de mai sus astfel încât vectorul de structuri să nu mai fie o variabilă globală neinițilizată (în ''​.bss''​) ci să fie alocat pe stivă.
  
-==== [1.5p] 9. Bonus: Alocare dinamică ====+<note tip> 
 +Construcția legată de ''​.bss''​ e recomandat să o ștergeți complet ca să nu vă încurce. 
 +</​note>​
  
-Realizați o alocare dinamică (cu ''​malloc''​) ​ a unui șir/array de bytes de o dimensiune dată (să spunem 128 de octeți) și apoi inițializați acel șir cu octetul/​caracterul ''​%%'​a'​%%''​.+<note tip> 
 +Ca să alocați vectorul de structuri pe stivă, folosiți o construcție de forma:<​code>​ 
 +    sub esp, <​size>​ 
 +</​code>​ 
 +unde ''<​size>''​ este dimensiunea spațiului pe care trebuie să îl faceți pe stivă. Folosiți valoarea ''​2000''​ pentru dimensiunea spațiului ​(exact rezultatul ​''​STRUCT_STUDENTS*NUM_STUDENTS''​)
 + 
 +Pentru a referi începutul spațiului alocat folosiți expresia ''​ebp - 2000''​. De la adresa indicată de ''​ebp - 2000''​ începe vectorul de structuri. 
 + 
 +Folosiți variabila ''​ebx''​ pentru a referi începutul spațiului alocat (adresa acelui spațiu). Folosiți o construcție de forma<​code>​ 
 +    lea ebx, [ebp-2000] 
 +</​code>​ 
 +Apoi va trebui să adunați la începutul spațiului alocat offset-ul aferent elementului curent (calculat în schelet în registrul ''​eax''​). 
 +</​note>​ 
 +==== [1.5p] 9. Bonus: Alocare pe stivă ==== 
 + 
 +Realizați o alocare **pe stivă** ​a unui șir/array de bytes de o dimensiune dată (să spunem 128 de octeți) și apoi inițializați acel șir cu octetul/​caracterul ''​%%'​a'​%%''​. 
 + 
 +<note tip> 
 +Pentru alocare pe stivă folosiți o construcție de forma<​code>​ 
 +sub esp, 128 
 +</​code>​ 
 +</​note>​
  
 <note tip> <note tip>
Line 474: Line 504:
 ==== [1.5p] 10. Bonus: Dump la zonă de memorie ==== ==== [1.5p] 10. Bonus: Dump la zonă de memorie ====
  
-Faceți //dump// la zona de memorie alocată ​dinamic ​înainte și după inițializarea ei. Prin //memory dump// înțelegem să fie afișat fiecare octet în format hexazecimal.+Faceți //dump// la zona de memorie alocată ​pe stivă ​înainte și după inițializarea ei. Prin //memory dump// înțelegem să fie afișat fiecare octet în format hexazecimal.
  
 ==== [1p] 11. Bonus: Dump pe zona de cod a procesului curent ==== ==== [1p] 11. Bonus: Dump pe zona de cod a procesului curent ====
  
 Faceți //dump// la zona de memorie de cod (text) a procesului curent. Începeți de la adresa funcției main și afișați un număr dat de octeți/​caractere (de exemplu ''​100''​). Faceți //dump// la zona de memorie de cod (text) a procesului curent. Începeți de la adresa funcției main și afișați un număr dat de octeți/​caractere (de exemplu ''​100''​).
 +
 +===== Soluții =====
 +
 +[[http://​elf.cs.pub.ro/​asm/​res/​laboratoare/​lab-06-sol.zip|Soluții de referință pentru exercițiile de laborator]]
laboratoare/laborator-06.1447853096.txt.gz · Last modified: 2015/11/18 15:24 by razvan.deaconescu