Sezione |
Indirizzi Base
Registri Interni
|
Schede del Tutorial |
Le PseudoOperazioni di MASM |
SCHEDA n° 02 [ 05 di 26] |
|
|
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):
| |||||
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). |
|
Scheda n° 02 | Pseudo Operazioni di MASM | |||||||
Scheda n° 02 - 05 |
|
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|