|
 |
Le
PseudoOperazioni di MASM |
SCHEDA n° 02 [
08
di 26] |
 |
|
Gestione delle MacroIstruzioni - IF1,
INCLUDE, ENDIF |
|
 | L'uso delle MacroIstruzioni è molto utile ma
spesso la loro definizione, all'inizio di un programma, è piuttosto
voluminosa; la presenza dei testi che le definiscono ritarda spesso l'inizio
della lettura del programma, cosa talvolta fastidiosa e indesiderata. |
 | La soluzione sta nell'estrarre tutte
le Macro definite, di volta in volta, dai nostri programmi sorgente, raccogliendole
in una libreria, partendo dal
presupposto che quasi certamente torneranno utili anche in altri programmi. |
 | Naturalmente dopo averle estratte dal
programma se non si prendono provvedimenti non
saranno più reperibili dal compilatore che, alla prima
etichetta non trovata, segnalerà
errore (error A2105:
Expected: instruction, directive, or label). |
 | Per renderle ancora visibili senza che siano fisicamente presenti di usa la
PseudoOperazione INCLUDE, che di occupa di cercare sul disco fisso un file di testo e di inserirlo pari pari nel punto in cui si esplicita questa richiesta; naturalmente se il file non viene trovato viene segnalato errore
(error A2116: Include file not
found: GIOBE.MAC) e la direttiva viene
ignorata. |
 | La figura mostra le 3 righe di programma, sempre presenti nelle nostre
Matrici,
al fine di rendere disponibile la libreria di
Macro
Giobe.MAC(clicca
qui se vuoi scaricarla):
; MACRO UTILIZZATE DAL PROGRAMMA:
if1
include GIOBE.MAC ;(C:\ARCH-LAB\BIN\GIOBE.MAC)
endif |
|
 | Naturalmente la direttiva INCLUDE
si presta ad "includere" qualsiasi cosa, per cui è
necessario essere ben certi di richiedere testi compatibili con il
nostro programma sorgente; potrebbe essere utile, per esempio, dividere programmi lunghi in più pezzi, ciascuno su un file diverso,
unendoli poi tra loro con questo comando.
|
 | Certamente ci si chiederà perchè la
direttiva INCLUDE sia anticipata
e posticipata da altre 2 PseudoOperazioni: IF1
obbliga il compilatore a fare l'acquisizione solo durante la prima passata e
ENDIF è sintatticamente
necessaria per chiudere la richiesta condizionata. |
 | La presenza di IF1
(= se stai eseguendo la prima passata)
evita inutile lavoro al compilatore: durante la prima passata legge
il file che raccoglie le nostre MacroIstruzioni, annota le etichette
di ciascuna di esse nella Tabella dei Simboli,
e sostituisce le chiamate alle Macro con
i rispettivi corpi; nella seconda, se
non è presente IF1, aggiunge
al listato tutto il testo
contenuto nel file incluso, marcando con una C
ogni riga aggiunta, operazione del tutto inutile, sia perchè allunga a
dismisura il listato, sia perchè i compiti indispensabili sono già stati
assolti durante la prima passata. La figura mostra le righe (da 3 a 8, poche
solo perchè miniLib.Mac contiene solo quelle) che non sarebbero presenti se
avessimo usato IF1/ENDIF:
include miniLib.MAC
EXTRN BIOSmsg:NEAR
|
2
include miniLib.MAC
3 C M_msgN MACRO
Testo
4 C
PUSH SI
5 C
LEA SI,Testo
6 C
CALL BIOSmsg
7 C
POP SI
8 C
ENDM
10
EXTRN BIOSmsg:NEAR |
|
 | Certamente IF1
ed ENDIF potranno tornare utili
anche in altre occasioni simili a questa, insieme ad altre pseudooperazioni
condizionali come IF e
ELSE; queste ed altre numerose altrenative sono
raccolte nella Tabella
Analitica e non verranno
trattate ulteriormente. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|