|
 |
Le
PseudoOperazioni di MASM |
SCHEDA n° 02 [
06
di 26] |
 |
|
Gestione delle MacroIstruzioni - MACRO,
ENDM |
|
 | Le MacroIstruzioni sono strutture importanti e
utili nella programmazione in Assembly; per esse l'assemblatore mette a
disposizione numerose pesudoOperazioni:
in queste pagine analizziamo solo quelle necessarie per la sua definizione,
lasciando al lettore incontentabile la possibilità di consultare la Tabella
Analitica, per scoprire le
altre. |
 | La MacroIstruzione
è definita in questo modo ([#]):
il nome
della Macro (nell'esempio M_msgN
) è scritto nella colonna delle etichette, seguito dalla PseudoOperazione
MACRO, nella colonna dei codici
operativi, seguita a sua volta dai parametri
della Macro (per la sua natura è irragionevole pensare che non ne abbia...); sulle
righe successive sono elencate le istruzioni (corpo)
che la Macro è chiamata a rappresentare; infine, dopo di esse la Macro
viene chiusa con la pseudoOperazione ENDM. |
 | La definizione delle Macro deve essere fatta
per tempo, di solito dopo quella delle costanti, all'inizio del nostro
programma sorgente; questo fatto da al programmatore la possibilità di
scrivere una sola riga di programma ([@]),
al posto di tutte quelle racchiuse nel corpo
della macro (nel nostro caso ben 4 istruzioni). |
 | Spetta poi all'assemblatore sostituire a sua
volta quest'unica riga con quelle effettive, compilando il codice ad esse
relativo; quindi in realtà, alla fine, il codice macchina è sempre lo
stesso! |
 |
Il
codice macchina prodotto alla fine dall'assemblatore è,
dunque, lo stesso; lo scopo della MACRO non è quindi
quello di ridurre il numero di bytes del programma finale ma di rendere
più leggibile il sorgente, sostituendo le sequenze
ripetitive di istruzioni con una unica macroIstruzione. |
 | L'esempio che segue mostra la definizione
([#])
della
M_msgN
(appartenente alla libreria
Giobe.MAC)
e il codice assembly ([@])
che la chiama:
M_msgN
MACRO Testo [#]
PUSH SI
LEA SI,Testo
CALL BIOSmsg
POP SI
ENDM |
EXTRN
BIOSmsg:NEAR
INIZIO: JMP
Main
frase1 DB 'Benvenuto!',00H
Main: NOP
M_msgN
frase1 [@]
NOP |
|
 | Il trattamento riservato dall'assemblatore
alla linea di programma con la Macro è chiaramente visibile nel listato:
1
M_msgN MACRO
Testo
2
PUSH SI
3
LEA SI,Testo
4
CALL BIOSmsg
5
POP SI
6
ENDM
7
EXTRN BIOSmsg:NEAR
INIZIO: JMP Main
12 0103 42 65
frase1 DB 'Benvenuto!',00H
Main: NOP
15
M_msgN frase1
16 010F 56
1
PUSH
SI
17 0110 8D 36 0103 R
1
LEA SI,frase1
18 0114 E8 0000 E
1
CALL BIOSmsg
19 0117 5E
1
POP SI
20 0118 90
NOP
|
|
 | Alla riga di codice
originale (linea 15, alla quale come si vede non corrisponde
alcun codice macchina) viene sostituita la sequenza
delle 4 linee di codice del corpo della Macro, evidenziate da MASM
con un numero (in questo caso 1) indicante il
livello di annidamento (se la macro contenesse un'altra macro quest'ultima
sarebbe marcata con il numero 2).
|
 |
L'analisi
della figura evidenzia un altro grande vantaggio nell'uso delle
Macro: la possibilità di adattare lo stesso gruppo di istruzioni
del suo corpo a situazioni di volta in volta diverse; possiamo
notare infatti che l'assemblatore ha compilato, al posto della
parola Testo,
l'indirizzo frase1,
passato alla macro come parametro. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|