 | Questa istruzione non
appartiene al Set dell'8088/86; si usa solo con 80286/486. |
 | Il suo compito è quello di facilitare le procedure,
in ingresso, a ricevere i parametri (cioè
sostanzialmente dati) attraverso
lo 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 ENTER
esegue, sostanzialmente, una serie di istruzioni già disponibili nel set
per cui, sebbene piuttosto raffinata, non sembra
strettamente necessaria. |
 | Ha 2 operandi:
 | il primo (numero a 16 bit) indica il numero
di bytes che saranno inseriti nello stack dalla procedura, cioè
in sostanza lo spazio da riservare alle variabili locali. Se questo
numero è 0 l'effetto di ENTER è esattamente quello della sequenza di
istruzioni:
Addr |
|
|
Sequenza
Bytes |
|
Istruzione |
|
0100
0101 |
|
|
55
89 E5 |
|
|
PUSH BP
MOV BP,SP |
|
Altrimenti, oltre a spingere nello stack
il valore di BP (PUSH BP)
e a copiare il puntatore effettivo in quello dedicato (MOV BP,SP),
sottrae da BP il numero passato come primo operando, al fine di puntare
il primo dato passato.
|
 | il secondo (numero a 8 bit, da 0 a 31) indica il livello
di annidamento della procedura dentro il codice sorgente scritto
in linguaggio ad alto livello |
|
 | Naturalmente al termine delle operazione di scambio dati è
necessario provvedere a pulire lo stack e ripristinare le condizioni di
partenza; per questo l'istruzione ENTER
fa coppia con LEAVE, ad essa
complementare, che si occupa di rilasciare le locazioni utilizzate e a
ripristinare i puntatori. |
 | Le sue caratteristiche sono riassunte nella
seguente tabella (leggi le istruzioni
): |