|
Tutorial
|
Dettaglio Istruzioni |
|
|
 |
Istruzioni
della Cpu 80x86 |
SCHEDA n° 07 [I/
037
di 198] |
 |
|
ENTER - Prepara
lo Stack per il Passaggio dei Parametri ad una Procedura |
|
 | 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
): |
| ENTER
N°Bytes,Annidamenti |
Riserva locazioni nello stack e aggiusta i puntatori |
| |
|
Esempio
di Applicazione |
Cicli
di Clock |
Mem
Acces |
N°
Bytes |
Flag
influenzate |
| Mnemonico |
Operandi |
86 |
268 |
386 |
486 |
O |
D |
I |
T |
S |
Z |
A |
P |
C |
ENTER
|
0,0
|
no |
11 |
10 |
14 |
no |
4 |
|
|
|
|
|
|
|
|
|
ENTER
|
12,1
|
no |
15 |
12 |
17 |
no |
4 |
ENTER
|
0,6
|
no |
12+4(n-1) |
15+4(n-1) |
17+3(n-1) |
no |
4 |
 | La tabella evidenzia che l'istruzione non
modifica alcuna flag e che ammette una
sola possibile tipologia di operandi: una coppia di numeri
interi. |
 | La figura seguente mostra le risorse
richieste da questa istruzione in funzione dei suoi operandi (leggi le
istruzioni);
da notare che, per evitare errori di compilazione, è necessario
specificare, all'inizio del sorgente, la pseudoOperazione
.286: |
|
Addr |
|
Codifica
Masm |
|
Sequenza
Bytes |
|
Istruzione |
|
|
|
|
|
|
|
|
.286 |
0100
0104
0108 |
|
C8 0000
00
C8 000C 01
C8 0000 06 |
|
C8 00
00 00
C8 0C 00 01
C8 00 00 06 |
|
|
ENTER 0,0
ENTER 12,1
ENTER 0,6 |
|
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|