Sezione |
Indirizzi Base
Registri Interni
|
Schede del Tutorial |
Stack - Definizione e Gestione |
SCHEDA n° 06 [ 4 di 7] |
|
|
Quando il processore esegue un'istruzione di
chiamata (CALL ProcFar) di Procedura
FAR provvede ai seguenti compiti:
| |||||||||||||||
Dopo l'esecuzione di CALL ProcFar, il processore si trova in tutt'altro ambiente, lontano dal programma principale da cui è partito, probabilmente addirittura in un altro 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 FAR
in cui è stato costretto a saltare) provvede ai seguenti compiti:
| |||||||||||||||
Dopo l'esecuzione di RET, il processore è dunque rientrato nei ranghi... |
|
Nonostante la apparente somiglianza con quello della pagina precedente l'istruzione RET è ora completamente diversa: recupera dallo Stack 4 bytes invece di 2. Poichè corrisponde ad una chiamata FAR è l'assemblatore stesso a codificarla in modo adeguato: dalle figure in dotazione possiamo vedere che la RET FAR ha codice operativo CBH, mentre quello della RET NEAR è C3H |
|
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 0DE0: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 0DE0:0103: il processore si accinge ad eseguire CALL 0DE0:010C: il puntatore di Stack non è stato influenzato dall'istruzione MOV: il suo valore è ancora SP=FFFE. | |||||||
Dopo l'esecuzione di CALL
0DE0:010C
(punto *3*):
|
Dopo l'esecuzione di ADD BX,AX , dentro la procedura (punto *4*), la coppia di registri CS:IP contiene 0DE0:010E: il processore si accinge ad eseguire RET: il puntatore di Stack non è stato influenzato dall'istruzione ADD: il suo valore è ancora SP=FFFA. | |||||
Dopo l'esecuzione di RET,
naturalmente di tipo FAR, dentro la procedura (punto *5*):
|
|
Riassumiamo la dinamica
dello Stack, nella gestione di una chiamata
di procedura extrasegmentale (FAR);
quando il processore è finalmente rientrato nel programma principale (per
l'azione della
RET far della procedura,
dopo esserne uscito per l'azione di
CALL ProcFar):
|
|
SP:FFF8 ??
non ancora utilizzato SP:FFF9 ?? non ancora utilizzato SP:FFFA 08 Lo Offset SP:FFFB 01 Hi Offset SP:FFFC E0 Lo Segment SP:FFFD 0D Hi Segment SP:FFFE 00 <- SP=FFFE SP:FFFF 00 |
|
Scheda n° 06 | Stack - Definizione e Gestione | |||||||
Scheda n° 06 - 4 |
|
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|