|
 |
Le
PseudoOperazioni di MASM |
SCHEDA n° 02 [
05
di 26] |
 |
|
Gestione dei Simboli - EQU
(segue) |
|
 | Gli alias
creati con la direttiva EQU
si possono riferire anche al nome (simbolo)
di una variabile definita nella zona
dati del programma: in questo caso l'assemblatore sostituirà l'alias
con il valore della variabile (cioè con il contenuto
della locazione di nome alias). |
 | Gli esempi che seguono illustrano questa
tecnica e mostrano anche un bizzarro modo di usare EQU:
è possibile creare alias anche
di una parola chiave, come il codice mnemonico
di una istruzione (sebbene la cosa sembri decisamente discutibile...): |
; COSTANTI PER IL PROGRAMMA:
opCode1
EQU MOV
opCode2 EQU ADD
datoByte
EQU ATTRIB
datoWord
EQU PAROLA
------------------------------
INIZIO: JMP
Main
------------------------------
ATTRIB
DB 0FH
PAROLA DW 1234H
------------------------------
Main: MOV
AL,datoByte
opCode1 AL,datoByte
ADD
AH,AL
opCode2 AH,AL
MOV
SI,datoWord
opCode1 SI,datoWord
|
------------- -------------------
0100 EB0490 JMP 0106
---- -------- -------------------
0103 0F DB 0FH
0104 3412 DW 1234H
---- -------- -------------------
0106 A00301 MOV AL,[0103]
0109 A00301 MOV AL,[0103]
010C 02E0 ADD AH,AL
010E 02E0 ADD AH,AL
0110 8B360401 MOV SI,[0104]
0114 8B360401 MOV SI,[0104]
----------------------------------
Symbols Name Type Value Attr
ATTRIB . . . L BYTE 0103 _PROG
DATOBYTE . . ALIAS ATTRIB
DATOWORD . . ALIAS PAROLA
INIZIO . . . .L NEAR 0100 _PROG
OPCODE1 . . . TEXT MOV
OPCODE2 . . . TEXT ADD
PAROLA . . . L WORD 0104 _PROG
|
 | L'analisi dei risultati (in
Debug)
mostra come opCode1
sia stato assunto come MOV
e compilato con il medesimo codice operativo (A0),
così come opCode2
è stato assunto come
ADD
e compilato con suo stesso codice operativo (02);
in entrambi i casi questi simboli sono ritenuti di tipo TEXT. |
 | I 2 alias riferiti ai nomi delle 2
variabili (datoByte per
ATTRIB e
datoWord per
PAROLA)
sono perfettamente intercambiabili e il codice prodotto è lo stesso: se
andiamo ad eseguire il programma dopo le prime 2 istruzioni in
AL ci sarà 0FH (valore datoByte
o ATTRIB) e dopo le ultime 2 in
SI ci sarà 1234H (valore di datoWord
o
PAROLA). |
 | La direttiva =
è simile, per l'effetto prodotto, alla EQU, ma è gestita dall'assemblatore in modo assolutamente diverso: mentre con
la seconda non è più possibile cambiare il valore associato ad un simbolo,
la = assegna ancora, la prima
volta, un valore al simbolo ma permette di ridefinirlo
in ogni momento! |
 | Il simbolo viene ancora sostituito
dall'assemblatore con un numero compreso tra 0
e 65535 (cioè con un valore numerico a 16 bit). |
 | L'effetto di questa importante e utile
direttiva può essere valutato osservando il codice sorgente (a sinistra) e
il resoconto fornito dal listato (a destra):
; COSTANTI PER IL PROGRAMMA:
alfa=12H
---------------------------
INIZIO: MOV AL,alfa
alfa=10H
MOV
AL,alfa
alfa=13H
MOV
AL,alfa
|
1
; COSTANTI PER IL PROGRAMMA:
2 =0012
alfa = 12H
--------------------------------------
7 0100 B0 12 INIZIO: MOV
AL,alfa
8 =0010
alfa = 10H
9 0102 B0 10
MOV AL,alfa
10=0013
alfa = 13H
11 0104 B0 13
MOV AL,alfa
--------------------------------------
Symbols Name Type Value
Attr
ALFA . . . . NUMBER 0013
|
|
 | Possiamo notare che l'assemblatore compila
il codice in funzione del valore corrente
di alfa (nelle istruzioni MOV
AL,alfa, insieme al codice operativo
B0H
mette prima 12H,
10H
e 13H), mentre l'ultimo valore di alfa,
per il listato (e quindi per MASM) è l'ultimo assegnato (13H). |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|