Tutorial |
Dettaglio Istruzioni |
Istruzioni della Cpu 80x86 |
SCHEDA n° 07 [I/ 144 di 198] |
|
|
Questa istruzione trasferisce nello stack di un dato a 16 bit (o a 32 bit, con 80386/486). | |
La definizione dell'istruzione è onomatopeica: l'idea è quella di spingere (push) in memoria qualcosa... | |
Il 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 ): |
PUSH Sorgente | [SS:SP]
stack << Sorgente 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 | ||
PUSH |
1234H |
no | 3 | 2 | 1 | no | 2,3 | |||||||||
PUSH |
DS |
10 | 3 | 2 | 3 | 1 | 1 | |||||||||
PUSH |
AX |
11 | 3 | 2 | 1 | 1 | 1 | |||||||||
PUSH | EAX | no | no | |||||||||||||
PUSH |
[Depo02] |
16+EA | 5 | 5 | 4 | 2 | 2,4 | |||||||||
PUSH | [Depo04] | 21+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. | |||||||
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 PUSH
XX provvede ai seguenti compiti:
| |||||
Se non si provvede altrimenti lo stack rimane sporco, cioè con 2 bytes in più rispetto alla condizione precedente l'esecuzione dell'istruzione: la cosa è fastidiosa ma non ancora critica... ma se l'operazione fosse ripetuta sciaguratamente troppe volte si rischia, scrivendo all'indietro, di sovrascrivere il programma mentre è in esecuzione... | |||||
Naturalmente con 80386/486 il puntatore è ESP e viene alla fine decrementato 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 144 - PUSH |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|