Sezione![]() |
Indirizzi Base
Registri Interni
|
Schede del Tutorial |
Stack - Definizione e Gestione |
SCHEDA n° 06 [ 3 di 7] |
|
![]() |
|
![]() | Quando il processore esegue un'istruzione di
chiamata (CALL ProcNear) di Procedura
NEAR provvede ai seguenti compiti:
| ||||||||
![]() | Dopo l'esecuzione di CALL ProcNear, il processore si trova in tutt'altro ambiente, lontano dal programma principale da cui è partito, ma nel medesimo segmento; si mette ad eseguire diligentemente tutte le istruzioni della procedura, in attesa della RET, che gli consentirà di tornare nel suo percorso nativo, naturalmente subito dopo l'istruzione CALL. | ||||||||
![]() | Quando il processore esegue l'istruzione
RET
(probabilmente l'ultima della Procedura NEAR
in cui è stato costretto a saltare) provvede ai seguenti compiti:
| ||||||||
![]() | Dopo l'esecuzione di RET, il processore è dunque rientrato nei ranghi... |
|
![]() | I movimenti del processore e dei suoi registri
possono essere monitorati, sviluppati e analizzati in ambiente Debug,
con l'aiuto di una semplice sequenza di istruzioni usata come banco di
prova; a sinistra osserviamo i valori dei registri
e a destra l'aspetto dello Stack, nelle
varie fasi:
|
![]() | All'inizio (punto *1*),
poichè la coppia di registri CS:IP
contiene 1192:0100,
il processore si trova costretto ad eseguire l'istruzione MOV
AX,0102
| ||||
![]() | Dopo l'esecuzione di MOV AX,0102 (punto *2*), la coppia di registri CS:IP contiene 1192:0103: il processore si accinge ad eseguire CALL 010C: il puntatore di Stack non è stato influenzato dall'istruzione MOV: il suo valore è ancora SP=FFFE. | ||||
![]() | Dopo l'esecuzione di CALL 010C
(punto *3*):
|
![]() | Dopo l'esecuzione di ADD BX,AX , dentro la procedura (punto *4*), la coppia di registri CS:IP contiene 1192:010E: il processore si accinge ad eseguire RET: il puntatore di Stack non è stato influenzato dall'istruzione ADD: il suo valore è ancora SP=FFFC. | ||||
![]() | Dopo l'esecuzione di RET,
dentro la procedura (punto *5*):
|
|
![]() | Riassumiamo la dinamica
dello Stack, nella gestione di una chiamata
di procedura intrasegmentale (NEAR);
quando il processore è finalmente rientrato nel programma principale (per
l'azione della
RET near della procedura,
dopo esserne uscito per l'azione di
CALL ProcNear):
|
|
![]() |
Scheda n° 06 |
![]() |
Stack - Definizione e Gestione |
![]() |
![]() |
![]() |
||
Scheda n° 06 - 3 |
|
|
|
|
Home
![]() |
|
|||||||
|
Motore Ricerca |
|