|
 |
Il Processore e il Debugger |
ISTRUZIONI 80x86 2/3
[27 di 60] |
 |
|
Formato delle Istruzioni - Tipi di Operandi |
|
 | Quando si parla di istruzione di solito si fa
riferimento ad una struttura articolata su 3
campi: il codice Mnemonico,
il campo Destinazione e il campo
Sorgente (questi ultimi separati da una virgola): |
|
Mnemonico |
Destinazione |
Sorgente |
| MOV |
AX, |
BX |
 | La sintassi delle istruzioni del linguaggio
assembly per 80x86 è sempre quella sopra indicata, ed è bene
fissarla bene in mente; l'esempio proposto è quello classico, e si legge: metti
(MOV) il contenuto del registro BX (sorgente)
in AX (destinazione). |
 | Nella stesura dei programmi sorgente è buona
norma educarsi a mantenere un certo ordine;
sebbene al lato pratico questo fatto non dia valore aggiunto, se non
estetico, conviene far uso del tasto tabulato,
al fine di mettere eventuali etichette
sulla prima colonna, tutti gli mnemonici
sulla seconda, e gli eventuali operandi
sulla terza; opzionalmente è possibile aggiungere un quarto tab per
scrivere un commento, di regola
preceduto da un ; (punto e virgola). |
 | L'esempio seguente cerca di far luce su questo
suggerimento, comunque utilizzato dall'Autore in tutti gli esempi di questo
sito: |
Esempio di Codice
Assembly
--------------------------------------------------
Etichetta Mnemon Operandi
;Commento |
Depo01
Depo02 |
DB
55H
;variabile a 8 bit
DW 55AAH
;variabile a 16 bit |
| ---------- |
---------------------------------------------- |
| Inizio: |
MOV
AX,ES ;Preparo il
puntatore
MOV ES,BX
;alla prima locazione
MOV DI,0000H
;della Ram del Video
MOV AL,ES:[DI]
;Estrazione carattere |
|
 | Lo stralcio di codice proposto
mette in evidenza che le parole in esso contenute possono essere scritte
indifferentemente in Maiuscolo o in minuscolo; è una questione di gusto...
, di leggibilità e di personalità: l'Autore preferisce (ma può essere
paranoia...) dare dignità alle etichette
e al commento, scrivendo entrambi
i campi in minuscolo ma con iniziale maiuscola, mentre predilige lo
stampatello maiuscolo per i campi mnemonico
e operandi, al fine di
evidenziare la parte principale del programma. |
 |
Il campo etichetta
:
 |
è molto importante perchè consente di associare un nome
di fantasia alla locazione corrispondente alla variabile
(DB, o DW, o altro) o all'istruzione
desiderata. |
 |
il nome dell'etichetta è usato come operando per consentire al
processore di localizzare la variabile in operazioni di scrittura e/o
lettura, e l'istruzione per saltarci (con JMP) o per chiamarla (con CALL) al
fine di eseguirla eseguirla. |
 |
può contenere tutte le
lettere (a-z,A-Z), tutti i numeri (0-9) ma non come primo carattere, e i
simboli "_" (underscore), "$" (dollaro) e
"?" (punto di domanda). |
 |
non deve essere uguale alle
parole riservate dell'ambiente di programmazione, come gli mnemonici
delle istruzioni e delle PseudoOperazioni
o il nome dei registri (sono corrette Inizio
_prima ma non DX
o ESC). |
|
 |
Il campo mnemonico
contiene parole da 2 a 7 lettere (di solito da 3...) che descrivono
sinteticamente il tipo di
operazione da eseguire sugli operandi, oppure l'eventuale PseudoOperazione,
o direttiva, da passare all'assemblatore; si definiscono mnemoniche
perchè sono studiate per dare subito l'idea del loro compito, come MOVe
(Muovi, sposta) JuMP (salta) CALL (chiama) e così via. |
 | Il campo Operando
è quello che assume le forme più svariate possibili:
 |
può anche rimanere
vuoto, se l'istruzione non prevede interlocutori espliciti (in questo caso
gli operandi sono fissati automaticamente dalla sintassi). |
 |
quando sono presenti sono di
solito uno o 2, e la loro
tipologia è
spesso del tipo:
 | tra registro e registro, o tra registro e
memoria, o tra memoria e registro. |
 | tra registro e costante, o tra
memoria e costante. |
 | tra accumulatore e costante. |
|
 | l'operando costante
è detto anche immediato, non
per dare l'immagine di una cosa istantanea,
ma nel senso di non mediato,
cioè in grado di esprimere se stesso senza bisogno di altri:
 | se si tratta di un numero
decimale è sufficiente digitarlo normalmente (1200); tutti i
numeri normali si intendono decimali. |
 | se deve esprimere un numero
esadecimale deve avere una "H"
dietro (2AH) e, se comincia per
lettera deve avere anche uno
"0" davanti (0B800H):
se non si mettesse questo 0
l'assemblatore segnalerebbe errore, scambiando il numero per
etichetta, ovviamente non definita. |
 | se, infine, il numero è binario deve
avere una "B" dietro
(01001100B), per le ragioni esposte
negli altri casi; la scrittura di un numero binario può sembrare
strana, ma in certe occasioni può aiutare a capire meglio il
contesto del programma, per esempio per evidenziare un sensore in
una batteria di otto, o un certo bit di un registro... |
 | attenti a non scrivere per errore la
"O" (vocale maiuscola) al posto dello "0"
(numero zero). |
|
 | l'operando registro
e l'operando memoria sono da
intendere come il valore contenuto in essi. |
|
 | Il campo del commento
è ininfluente dal punto di vista del prodotto dell'assemblatore, ma per
questo non deve essere sottovalutato: un buon programmatore cerca sempre di
annotare il suo pensiero presente per sé e per i posteri... |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|