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

  Differenza tra Macro e Procedure

SCHEDA n° 03 [ 4  di 4] 

    

    Che differenza c'è tra PROCEDURE e MACRO?
     
bulletSiamo pronti per tirare le somme: abbiamo la consapevolezza che sia le Procedure che le Macroistruzioni sono strutture molto utili...
bulletIl problema da risolvere è: quando conviene usare le prime in alternativa alle seconde?

               

bulletSe abbiamo letto con attenzione quanto detto finora, la risposta non dovrebbe essere difficile; entrambe rendono più leggibile il codice sorgente (non solo assembly) e riducono gli errori di programmazione, ma sono estremamente diverse tra loro!

               

bulletPer arrivare alla soluzione conviene rivedere le considerazioni precedenti in una prospettiva di confronto e con spirito di osservazione.

   

bulletUna Procedura è una zona di programma inalterabile, specializzata e di norma versatile, cioè in grado di fare cose simili ma diverse, in funzione dei valori predisposti in uno o più registri prima della sua chiamata; ti voglio proporre 3 esempi molto significativi (ma l'aspetto del passaggio dei parametri è visibile in molti altri casi):
bulletla BIOchr1 mette a video un carattere, il cui codice ascii deve essere predisposto nel registro AL prima di chiamarla
bulletla SET_cur fissa la posizione di stampa corrente di ogni cosa messa a video, sulla base dei valori predisposti nei registri DL (colonna) e  DH (riga) prima di chiamarla
bulletla BIOSmsg stampa (nella posizione di stampa corrente) la stringa Ascii puntata dall'indirizzo predisposto nel registro SI prima di chiamarla

               

bulletLa chiamata di una procedura è quasi sempre inutile se non si provvede a inizializzare uno o più registri prima della sua chiamata; dunque:
bulletse è necessario mettere a video un carattere non possiamo fare a meno delle 2 istruzioni: MOV AL,'A' e CALL BIOchr1
bulletse è dobbiamo fissare la posizione di stampa non possiamo fare a meno delle 3 istruzioni: MOV DL,12, MOV DH,0 e CALL SET_cur
bulletse bisogna stampare una stringa Ascii non possiamo fare a meno delle 2 istruzioni: LEA SI,Testo01 e CALL BIOSmsg

      

Suggerimento Quando una Procedura non può essere chiamata senza averle anteposte una o più istruzioni di inizializzazione, è il momento di creare una Macro!

               

bulletLa conclusione logica delle precedenti considerazioni si riflette nella creazione di altrettante Macro, una per ciascun servizio:
bulletla M_chr carattere, il cui corpo conterrà le 2 istruzioni necessarie per mettere a video un carattere predisposto nel parametro carattere
bulletla M_CURSOR riga, colonna, il cui corpo conterrà le 3 necessarie per fissare la posizione di stampa corrente suggerita dai parametri riga, colonna
bulletla M_msgN Testo, il cui corpo conterrà le 2 istruzioni necessarie per stampare la stringa Ascii puntata dal parametro Testo

               

bulletEcco come potrebbero essere definite le 3 macro:

               

M_Chr MACRO carattere
      MOV   AL,carattere
      CALL  BIOchr1
      ENDM
M_CURSOR MACRO riga,colonna
         MOV   DL,colonna
         MOV   DH,riga
         CALL  SET_cur
         ENDM
M_msgN MACRO Testo
       LEA   SI,Testo
       CALL  BIOSmsg
       ENDM

               

bulletDopo aver definito le 3 Macro (all'inizio del sorgente ASM) sarà possibile sostituire  le istruzioni presentate 3 punti fa con una sola riga di programma per ciascun gruppo:
bulletle 2 istruzioni per mettere a video il carattere "A" saranno sostituite dalla pseudo-istruzione: M_Chr "A"
bulletle 3 per fissare la posizione di stampa sulla riga0, colonna 12 saranno sostituite dalla pseudo-istruzione: M_CURSOR 0,12
bulletle 2 istruzioni per stampare la stringa Testo01 saranno sostituite dalla pseudo-istruzione: M_msgN Testo01

               

bulletIn sostanza la presenza di una Macroistruzione in un sorgente ASM non cambia nulla, se non esteticamente e funzionalmente; la quantità di bytes prodotta dal compilatore è esattamente identica ma il codice risulterà più compatto e breve.
bulletAvrai notato che i parametri da associare ai vari registri sono semplicemente elencati uno dopo l'altro, separati da una virgola, sottolineando una volta di più la potenza di questa struttura

      

Suggerimento L'uso corretto di una Macro è quello di organizzare la chiamata di una Procedura: il suo compito è quello di sostituire (con una sola riga di programma) il gruppo di istruzioni necessarie per inizializzarla; la cosa che non fa risparmiare memoria di programma (il codice macchina prodotto dall'assemblatore è sempre lo stesso) ma rende più leggibile il programma.

    

Pagina Precedente Scheda n° 03 Pagina Successiva Differenza tra Macro e Procedure Torna al Menu delle Schede del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
Scheda n° 03 -  4
1 2 3 4

    

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