| Questa istruzione non
appartiene al Set dell'8088/86; si usa solo con 80286/486. |
| Il suo compito è quello di facilitare le procedure,
in uscita, a scaricare i parametri (cioè
sostanzialmente dati) dallo stack
(Stack Frame); l'uso dello stack come zona
dati provvisoria è una consuetudine piuttosto diffusa
nei programmi scritti in un linguaggio
ad alto livello e, per evitare di entrare in conflitto con la
Cpu, nella condivisione di questa preziosa struttura, è necessario
perseguire tecniche sicure. |
| Per questa ragione la gestione delle locazioni
dello stack è affidata, in questi casi al puntatore SS:BP,
invece del classico SS:SP, lasciato
esclusivamente alla Cpu. |
| L'istruzione LEAVE
esegue, sostanzialmente, istruzioni già disponibili nel set
per cui, sebbene piuttosto raffinata, non sembra
strettamente necessaria. |
| In uscita da una procedura che ha beneficiato di parametri
passati per essa nello stack è necessario provvedere alla sua pulizia e al
ripristino delle condizioni di
partenza; per questo l'istruzione LEAVE
fa coppia con ENTER, ad essa
complementare, che si occupa di riservare le locazioni utilizzate e a
predisporre i puntatori. |
|
In pratica l'effetto di LEAVE è esattamente quello della sequenza di
istruzioni:
Addr |
|
Sequenza
Bytes |
|
Istruzione |
|
0100
0101 |
|
55
89 E5 |
|
|
MOV
SP,BP
POP BP |
|
cioè, oltre a recuperare il puntatore effettivo
da quello dedicato (MOV SP,BP),
recupera dallo stack anche il valore originale di BP (POP BP);
solitamente il puntatore di stack viene poi arretrato
alla corretta posizione iniziale con un'istruzione RET
nn, con nn uguale al numero passato come
primo operando alla ENTER, al fine di scaricare
tutti i dati passati in precedenza. |
| Le sue caratteristiche sono riassunte nella
seguente tabella (leggi le istruzioni
): |