passaggio di parametri nello stack V1.0

954 views
866 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
954
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

passaggio di parametri nello stack V1.0

  1. 1. PASSAGGIO DI PARAMETRI -Animazione del passaggio di parametri nello stack- *V1. 0*
  2. 2. Cenni teorici <ul><li>Lo stack, chiamato anche pila, è una struttura di dati dinamica gestita attraverso la modalità LIFO (Last-In First-Out). </li></ul><ul><li>Gli elementi, che andranno a comporre questa pila, vengono aggiunti dall’alto e vengono posizionati uno sopra l’altro; il prelevamento di un oggetto avviene prendendo per primo quello che si trova in cima, cioè quello che è stato inserito per ultimo. </li></ul>
  3. 3. Programma Ora, per realizzare l’animazione del passaggio di parametri nello stack, consideriamo una porzione di programma: <ul><li>PROGRAMMA PRINCIPALE </li></ul><ul><li>. </li></ul><ul><li>. </li></ul><ul><li>NUM1 DW ? </li></ul><ul><li>NUM2 DW ? </li></ul><ul><li>. </li></ul><ul><li>. </li></ul><ul><li>PUSH NUM1 </li></ul><ul><li>PUSH NUM2 </li></ul><ul><li>CALL SOMMA </li></ul><ul><li>. </li></ul><ul><li>. </li></ul><ul><li>. </li></ul><ul><li>SOTTOPROGRAMMA “SOMMA” </li></ul><ul><li>. </li></ul><ul><li>. </li></ul><ul><li>SOMMA PROC NEAR </li></ul><ul><li>PUSH BP </li></ul><ul><li>MOV BP, SP </li></ul><ul><li>MOV AX, [BP+4] </li></ul><ul><li>ADD AX, [BP+6] </li></ul><ul><li>. </li></ul><ul><li>. </li></ul><ul><li>POP BP </li></ul><ul><li>RET 4 </li></ul><ul><li>SOMMA ENDP </li></ul><ul><li>. </li></ul><ul><li>. </li></ul><ul><li>. </li></ul>
  4. 4. 1° All’ inizio lo stack, da noi preso in considerazione, è vuoto, poiché non sono state effettuate operazioni in esso.
  5. 5. SP
  6. 6. 2° Dopo aver dichiarato due variabili di nome NUM1 e NUM 2, ad un certo punto del nostro programma, attraverso l’ operazione PUSH, inseriamo gli elementi in cima alla pila . . . . PUSH NUM1 PUSH NUM2 . .
  7. 7. SP NUM1 NUM2
  8. 8. 3° Ora, attraverso l’ istruzione CALL, si chiama il sottoprogramma SOMMA. La CALL ha due compiti fondamentali: - mettere l’ IP sullo stack - saltare all’ indirizzo della prima istruzione del sottoprogramma . . . CALL SOMMA . .
  9. 9. SP NUM1 NUM2 IP/SOMMA
  10. 10. 4° Dopo la chiamata al sottoprogramma, vengono eseguite le istruzioni in esso. Le prime, sono: . . PUSH BP MOV BP, SP . . Attraverso queste, viene inserito nello stack il registro base BP e, successivamente, viene spostato il contenuto del registro SP in esso.
  11. 11. SP NUM1 NUM2 IP/SOMMA BP SP
  12. 12. 5° Ora, si utilizzano due istruzioni per prendere i parametri che si vogliono utilizzare (in questo caso NUM1 e NUM2) in ordine inverso da come ce li abbiamo messi. . . MOV AX, [BP+4] ADD AX, [BP+6] . . . La prima istruzione mette NUM2 nel registro AX; la seconda, invece, somma NUM1 ad AX. A questo punto, nel registro, si troverà la somma dei due numeri.
  13. 13. NUM1 NUM2 IP/SOMMA BP SP BP+2 BP BP+4 BP+6
  14. 14. 6° Dopo aver sommato i due numeri, ci resta soltanto da “ripulire” lo stack attraverso le operazioni POP e RET. Con la POP, si preleva un elemento della nostra pila eliminandolo dalla cima. Con la RET, invece, si ripulisce lo stack di ‘n’ byte (in questo caso 4 byte); inoltre, prende l’ indirizzo che ha messo la CALL in precedenza, e ritorna al programma principale. . . POP BP RET 4 . .
  15. 15. SP NUM1 NUM2 IP/SOMMA BP SP

×