| 
      Sezione | 
      
       
   
    
      Indirizzi Base
    
    
    
      Registri Interni
    
      | 
    
| Schede del Tutorial | 
| Differenza tra Macro e Procedure | 
      SCHEDA n° 03 [ 4 di 4]  | 
   
  | 
| 
     | 
    
  | 
  
| Siamo pronti per tirare le somme: abbiamo la consapevolezza che sia le Procedure che le Macroistruzioni sono strutture molto utili... | |
| Il problema da risolvere è: quando conviene usare le prime in alternativa alle seconde? | 
| 
         
  | 
      
| Se 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! | 
| 
         
  | 
      
| Per arrivare alla soluzione conviene rivedere le considerazioni precedenti in una prospettiva di confronto e con spirito di osservazione. | 
| 
         
  | 
      
Una 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):
  | 
| 
         
  | 
      
La chiamata di una procedura è 
  quasi sempre inutile se non si provvede a inizializzare uno o più registri prima della sua chiamata; dunque:
  | 
| 
     
  | 
      
| 
           | 
          Quando una Procedura non può essere chiamata senza averle anteposte una o più istruzioni di inizializzazione, è il momento di creare una Macro! | 
| 
         
  | 
      
La conclusione logica delle precedenti considerazioni si 
  riflette nella creazione di altrettante Macro, una per ciascun servizio:
  | 
| 
         
  | 
      
| Ecco 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  | 
    
| 
         
  | 
      
Dopo 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:
  | 
| 
         
  | 
      
| In 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. | |
| Avrai 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 | 
| 
     
  | 
      
| 
           | 
          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. | 
  | 
| 
      
       |     
    Scheda n° 03 | 
      
       | 
    Differenza tra Macro e Procedure | 
     | 
    
    
     | 
    
     | 
 ||
| Scheda n° 03 - 4 | 
      
  | 
    
| 
     
  | 
  
        
  | 
    
        
  | 
    
| 
      
         
        Home 
     | 
      
  | 
    |||||||
      
  | 
       
          
        Motore Ricerca  | 
      
  |