Sezione

Indirizzi Base Registri Interni
Area Comunicazione BIOS Funzioni BIOS Funzioni DOS
Prefazione Capitolo 1 Capitolo 2 Schede
Libreria ASM Libreria MAC Palestra Progetti ASM
Info Download INDICE

Schede del Tutorial

Home » Programma il Computer » Tutorial Assembly

Le Schede del Tutorial

  Le PseudoOperazioni di MASM

SCHEDA n° 02 [ 07  di 26] 

    

    Gestione delle MacroIstruzioni - LOCAL
     
bulletVediamo ora di sottolineare un possibile problema di sintassi: quando nel corpo della macro sono presenti etichette d'indirizzo è necessario dichiarale prima del corpo con la pseudoOperazione LOCAL.
bulletSebbene la riga contenente la Macroistruzione, tra le altre del programma, dia la sensazione di eleganza e compattezza, non bisogna dimenticare l'assemblatore la sostituirà con le istruzioni del suo corpo ogni volta che viene chiamata in causa (anche molte volte nell'ambito del programma sorgente).

      

bulletPer mostrare questo effetto ho creati l'inedita Macro M_Test: nell'esempio seguente la viene chiamata 2 volte: osserviamo (a destra, in forma ridotta) come MASM ha codificato il listato:

      

M_Test   MACRO  Dato
         LOCAL  mmm1
         MOV    AL,Dato
         CMP    AL,12H
         JZ     mmm1
         XOR    AL,AL
mmm1:    MOV    AH,00H
         ENDM
-----------------------
INIZIO:  NOP
         M_Test 20H
         NOP
         M_Test 30H
         NOP
14 0100   INIZIO: NOP
15    
            M_Test 20H
16 0104 1         MOV    AL,Dato
17 0106         CMP    AL,12H
18 0108 1         JZ     ??0000
19 011A 1         XOR    AL,AL
20 0118 1 ??0000: MOV    AH,00H 
21 010E           NOP
22                M_Test 30H
23 010F 1         MOV    AL,30H 
24 0111 1         CMP    AL,12H 
25 0113         JZ     ??0001
26 0115 1         XOR    AL,AL 
27 0117 1 ??0001: MOV    AH,00H 
28 0119           NOP

      

bulletPer la presenza di LOCAL, l'etichetta originaria mmm1 è stata sostituita con un simbolo fatto con 2 punti di domanda e un numero progressivo, ??0000; il numero viene incrementato ogni volta che l'assemblatore deve sostituire l'etichetta di una Macro, indipendentemente dal suo nome corrente e dalla Macro che la utilizza. 
bulletCosì, nell'esempio, la medesima etichetta mmm1 è stata chiamata ??0000 la prima volta e  ??0001 la seconda; in questo modo l'assemblatore rende unici i simboli a riferimenti dello stesso tipo.

      

bulletSe non avessimo dichiarato LOCAL mmm1 il compilatore, costretto a scrivere 2 volte il testo della Macro esattamente come è stato definito, già nella prima passata avrebbe trovato l'etichetta mmm1 scritta 2 volte (segnalando error A2004: Redefinition of symbol), mentre nella seconda passata avrebbe segnalato 2 errori (error A2026: Reference to multidefined symbol e error A2005: Symbol is multidefined: MMM1) ogni volta che avrebbe incontrato mmm1 (cioè 2 volte...).

      

    Gestione delle MacroIstruzioni - .XALL, .LALL, .SALL
     
bulletA margine della discussione delle PseudoOperazioni destinate alla Gestione delle MacroIstruzioni, sebbene di interesse e utilizzo relativamente scarso, ne citiamo alcune create per il controllo dei commenti eventualmente scritti nel corpo della Macro:
bulletse non viene specificata nessuna di queste direttive (condizione di default) è come se fosse stata data la direttiva .XALL; in questo caso nel listato vengono mostrate solo le righe di codice e non i commenti (come negli esempi precedenti).
bulletla direttiva .LALL (List All) obbliga MASM a scrivere, nel listato, tutto quello che è stato definito nel corpo della Macro, esclusi i commenti forniti dopo 2 punto e virgola, ;;.
bulletinfine la direttiva .SALL (Suppress ALL) permette di evitare di scrivere nel listato le righe dell'espansione.

      

bulletL'azione prodotta dalle 3 direttive sulle chiamate della Macro M_Dato si vede chiaramente dal listato  seguente:

      

 1              .XALL ; non è necessaria (default)
 2      M_Dato  MACRO Dato
 3              ; commento controllabile
 4              ;; commento che non sarà mai visibile
 5              ADD AL,Dato
 6              XOR AL,AL
 7              ENDM
-------------------------------------------------------
13 0100 INIZIO: NOP
14              M_Dato 20H
15 0104 1       ADD AL,20H
16 0106 1       XOR AL,AL
17              .LALL ; mostra tutto, compresi commenti
18              M_Dato 20H
19      1       ; commento controllabile
20      1       ;
21 0108 1       ADD AL,20H
22 010A 1       XOR AL,AL
23 010C         NOP
24              .SALL ; non mostrare l'espansione Macro
25              M_Dato 20H
26 0111         NOP

    

Pagina Precedente Scheda n° 02 Pagina Successiva Pseudo Operazioni di MASM Torna al Menu delle Schede del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
Scheda n° 02 -  07
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

    

SCHEDE » 1.Header EXE 2.PseudoOp MASM 3.Differenza tra Macro e Procedure
4.
Tabella Vettori 5.PSP 6.Stack 7.Istruzioni 80x86
8.La misura dell'Informazione 9.Numeri e Logica Binaria
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati