Tutorial |
Dettaglio Istruzioni |
Istruzioni della Cpu 80x86 |
SCHEDA n° 07 [I/ 139 di 198] |
|
|
Questa istruzione preleva dallo stack di un dato a 16 bit (o a 32 bit, con 80386/486). | |
La definizione dell'istruzione è onomatopeica: l'idea è quella di tirare (pop) fuori dalla memoria qualcosa... | |
Se in precedenza è stato fatto un PUSH un buon programmatore non dimentica recuperare il dato con l'istruzione POP, magari verso una diversa destinazione; non va dimenticato infatti che lo stack è una struttura delicata e degna della massima attenzione: un piccolo errore di gestione può distruggere il programma in esecuzione e bloccare il computer.. |
Nello Stack: quello che si scrive deve essere, prima o poi, tolto, cioè per ogni PUSH deve esserci un POP ! |
Le sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni ): |
POP Destinazione | Destinazione
<< stack SP << SP+2 (o SP + 4) |
|||||||||||||||
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 | ||
POP |
DS |
8 | 5 | 7 | 3 | 1 | 1 | |||||||||
POP |
AX |
8 | 5 | 4 | 1 | 1 | 1 | |||||||||
POP | EAX | no | no | 4 | 1 | 1 | 1 | |||||||||
POP |
[Depo02] |
17+EA | 5 | 5 | 6 | 2 | 2,4 | |||||||||
POP | [Depo04] | 25+EA |
La tabella evidenzia che
l'istruzione non altera alcuna flag. Inoltre mostra le possibili tipologie
dell'unico operando:
|
La coppia PUSH/POP è ideale quando è necessario usare un registro senza rischiare di perderne il contenuto; può succedere infatti di avere tutti i registri caricati con valori importanti e, non avendone altri (data il loro limitato numero...) di non sapere che santi pigliare... | |
In effetti è sempre possibile salvare il valore di ciascun registro nello stack, riutilizzare a sazietà ciascuno di essi, e ripristinarlo alla fine, prelevandolo nei registri di partenza dallo stack. | |
Sottolineiamo che il registro di segmento di codice, CS, non può essere recuperato con questa istruzione; non è comunque un grosso problema: basta eseguire una RET. | |
Tutte le procedure fatte a regola d'arte (personali e di sistema) dovrebbero come prime istruzioni salvare nello stack tutti i registri da esse utilizzati, e recuperarli alla fine, prima di tornare. |
Con tecnica PUSH/POP è comunque possibile salvare (nello stack) un registro, per esempio AX, e recuperare (dallo stack) in un altro registro, per esempio BX (nel caso proposto otterremo lo stesso risultato di MOV BX;AX). Questa opportunità si dimostra l'unica strada perseguibile con registri (o altro) che non possono essere travasati con MOV, come quelli di segmento. |
Quando il processore esegue un'istruzione POP
XX provvede ai seguenti compiti:
| |||||||
L'azione di POP è benedetta e dovrebbe essere esercitata nella misura dei PUSH effettuati in precedenza; ma è facile pensare che anche l'esecuzione di un POP senza aver prima spinto qualcosa nello stack è sciagurata: in questo caso, pur non essendo traumatica per il programma in esecuzione, sono i dati recuperati in XX ad essere inattendibili, con inevitabili malfunzionamenti. | |||||||
Naturalmente con 80386/486 il puntatore è ESP e viene alla fine incrementato di 4 locazioni. |
La figura seguente mostra le risorse richieste da questa istruzione in funzione degli operandi coinvolti (leggi le istruzioni): |
|
|
Scheda n° 07 | Istruzioni Cpu 80x86 | |||||||
Istruzione 139 - POP |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|