Sezione |
Indirizzi Base
Registri Interni
|
Schede del Tutorial |
Stack - Definizione e Gestione |
SCHEDA n° 06 [ 5 di 7] |
|
|
Le chiamate di sistema sono certamente extrasegmentali;
si tratta di procedure speciali:
| |||||||||
In ogni caso il processore può disporre di
questi servizi eseguendo l'istruzione di
chiamata
INT
xx; il numero
esadecimale XX, passato come
operando, indica il tipo di servizio desiderato; per restare agli esempi
suggeriti poco fa:
|
|
Quando il processore è chiamato ad eseguire l'istruzione
INT
xx provvede ai seguenti compiti:
| |||||||||||||||||
Dopo l'esecuzione di INT xx, il processore si trova in tutt'altro ambiente, lontano dal programma principale da cui è partito, certamente in un altro segmento; si mette ad eseguire diligentemente tutte le istruzioni della procedura, in attesa della IRET, che gli consentirà di tornare nel suo percorso nativo, naturalmente subito dopo l'istruzione INT. | |||||||||||||||||
Quando il processore esegue l'istruzione
IRET
(al termine della Procedura di Sistema
in cui è stato costretto a saltare) provvede ai seguenti compiti:
| |||||||||||||||||
Dopo l'esecuzione di IRET, il processore è dunque rientrato nei ranghi... |
|
In questo caso l'istruzione di ritorno, IRET, è del tutto diversa: recupera dallo Stack ben 6 bytes invece dei 2 di RET e i 4 di RETF. |
|
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,0E2A
| |||||
Dopo l'esecuzione di MOV AX,0E2A (punto *2*), la coppia di registri CS:IP contiene 0DE0:0103: il processore si accinge ad eseguire INT 10: il puntatore di Stack non è stato influenzato dall'istruzione MOV: il suo valore è ancora SP=FFFE. | |||||
Dopo l'esecuzione di INT
10
(punto *3*):
|
Dopo l'esecuzione di CMP CS:[08A7],02 e delle rimanenti istruzioni (<< omissis >>) della procedura di Sistema (punto *4*), la coppia di registri CS:IP contiene 0212:06AC e il processore si accinge ad eseguire IRET; il puntatore di Stack non è stato influenzato dalle istruzioni precedenti: il suo valore è ancora SP=FFF8. | |||||
Dopo l'esecuzione di IRET,
dentro la procedura (punto *5*):
|
|
Riassumiamo la dinamica
dello Stack, nella gestione di una chiamata
di procedura di Sistema (INT);
quando il processore è finalmente rientrato nel programma principale (per
l'azione della
IRET della procedura,
dopo esserne uscito per l'azione di INT 10H):
|
|
SP:FFF6 ??
non ancora utilizzato SP:FFF7 ?? non ancora utilizzato SP:FFF8 05 Lo Offset SP:FFF9 01 Hi Offset SP:FFFA E0 Lo Segment SP:FFFB 0D Hi Segment SP:FFFC 02 Lo Registro Flag SP:FFFD 32 Hi Registro Flag SP:FFFE 00 <- SP=FFFE SP:FFFF 00 |
|
Scheda n° 06 | Stack - Definizione e Gestione | |||||||
Scheda n° 06 - 5 |
|
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|