Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 139 di 198] 

    

    POP - Estrae dallo stack un dato
     
bulletQuesta istruzione preleva dallo stack di un dato a 16 bit (o a 32 bit, con 80386/486).
bulletLa definizione dell'istruzione è onomatopeica: l'idea è quella di tirare (pop) fuori dalla memoria qualcosa...
bulletSe 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..
    
Ricorda... Nello Stack: quello che si scrive deve essere, prima o poi, tolto, cioè per ogni PUSH deve esserci un POP !
    
bulletLe sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
  POP Destinazione  Destinazione <<  stack
 SP     <<  SP+2 (o SP + 4)

Esempio di Applicazione

Cicli di Clock Mem
Acces

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
         
bulletLa tabella evidenzia che l'istruzione non altera alcuna flag. Inoltre mostra le possibili tipologie dell'unico operando:
bulletun registro (a 16 o 32 bit), anche di segmento (escluso CS).
bulletil valore contenuto in una locazione di memoria (a 16 o a 32 bit).
bulletLa 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...
bulletIn 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.
bulletSottolineiamo che il registro di segmento di codice, CS, non può essere recuperato con questa istruzione; non è comunque un grosso problema: basta eseguire una RET.
bulletTutte 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.
    
Suggerimento 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.
    
bulletQuando il processore esegue un'istruzione POP XX provvede ai seguenti compiti:
bulletpreleva il byte contenuto nella locazione attualmente puntata da SP, lo trasferisce nella parte bassa dell'oggetto a 16 bit indicato da XX.
bulletincrementa il valore di SP e lo utilizza per puntare la locazione da cui prelevare il byte da utilizzare come parte alta dell'oggetto a 16 bit indicato da XX.
bulletincrementa ancora SP.
bulletL'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.
bulletNaturalmente con 80386/486 il puntatore è ESP e viene alla fine incrementato di 4 locazioni. 
         
bulletLa figura seguente mostra le risorse richieste da questa istruzione in funzione degli operandi coinvolti (leggi le istruzioni):
          

Addr

Codifica Masm

Sequenza Bytes

Istruzione

0100
0102
55AA
55AA1188
AA 55
88 11 AA 55
Depo02 
Depo04
DW 55AAH
DD 55AA1188H
---- ---------------- ----------------- ------- ----------------------
0100
0101
0102
0103
0104
0105
0106
1F
07
17
58
5B
59
5A
1F
07
17
58
5B
59
5A

 
POP DS
POP ES
POP SS
POP AX
POP BX
POP CX
POP DX

    

Pagina Precedente Scheda n° 07 Pagina Successiva Istruzioni Cpu 80x86 Torna al Menu delle Schede del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
Istruzione 139 - POP

    

SCHEDE » 1.Header EXE 2.PseudoOp MASM 3.Differenza tra Macro e Procedure
4.
Tabella Vettori 5.PSP 6.Stack 7.Istruzioni 80x86
8.La misura dell'Informazione 9.Numeri e Logica Binaria
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati