SlideShare uma empresa Scribd logo
1 de 15
PASSAGGIO DI PARAMETRI -Animazione del passaggio di parametri nello stack- *V1. 0*
Cenni teorici ,[object Object],[object Object]
Programma  Ora, per realizzare l’animazione del passaggio di parametri nello stack, consideriamo una porzione di programma: ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
1°  All’ inizio lo stack, da noi preso in considerazione, è vuoto, poiché non sono state effettuate operazioni in esso.
SP
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 . .
SP NUM1 NUM2
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 . .
SP NUM1 NUM2 IP/SOMMA
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.
SP NUM1 NUM2 IP/SOMMA BP SP
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.
NUM1 NUM2 IP/SOMMA BP SP BP+2 BP BP+4 BP+6
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 . .
SP NUM1 NUM2 IP/SOMMA BP SP

passaggio di parametri nello stack V1.0

  • 1. PASSAGGIO DI PARAMETRI -Animazione del passaggio di parametri nello stack- *V1. 0*
  • 2.
  • 3.
  • 4. 1° All’ inizio lo stack, da noi preso in considerazione, è vuoto, poiché non sono state effettuate operazioni in esso.
  • 5. SP
  • 6. 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 . .
  • 8. 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. SP NUM1 NUM2 IP/SOMMA
  • 10. 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. SP NUM1 NUM2 IP/SOMMA BP SP
  • 12. 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. NUM1 NUM2 IP/SOMMA BP SP BP+2 BP BP+4 BP+6
  • 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. SP NUM1 NUM2 IP/SOMMA BP SP