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 [ 06  di 26] 

    

    Gestione delle MacroIstruzioni - MACRO, ENDM
     
bulletLe 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.

      

bulletLa 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.

      

bulletLa 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).
bulletSpetta 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!

      

Ricorda... 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. 

      

bulletL'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

      

bulletIl 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     
               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

      

bulletAlla 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).

      

Ricorda... 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.

    

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 -  06
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