| 
      Sezione | 
      
       
   
    
      Indirizzi Base
    
    
    
      Registri Interni
    
      | 
    
| Schede del Tutorial | 
| Le PseudoOperazioni di MASM | 
      SCHEDA n° 02 [ 05 di 26]  | 
   
  | 
| 
     | 
    
  | 
  
| Gli alias creati con la direttiva EQU si possono riferire anche al nome (simbolo) di una variabile definita nella zona dati del programma: in questo caso l'assemblatore sostituirà l'alias con il valore della variabile (cioè con il contenuto della locazione di nome alias). | |
| Gli esempi che seguono illustrano questa tecnica e mostrano anche un bizzarro modo di usare EQU: è possibile creare alias anche di una parola chiave, come il codice mnemonico di una istruzione (sebbene la cosa sembri decisamente discutibile...): | 
| 
     
  | 
      
| ; COSTANTI PER IL PROGRAMMA: opCode1 EQU MOV opCode2 EQU ADD datoByte EQU ATTRIB datoWord EQU PAROLA ------------------------------ INIZIO: JMP Main ------------------------------ ATTRIB DB 0FH PAROLA DW 1234H ------------------------------ Main: MOV AL,datoByte opCode1 AL,datoByte ADD AH,AL opCode2 AH,AL MOV SI,datoWord opCode1 SI,datoWord  | 
      ------------- ------------------- 0100 EB0490 JMP 0106 ---- -------- ------------------- 0103 0F DB 0FH 0104 3412 DW 1234H ---- -------- ------------------- 0106 A00301 MOV AL,[0103] 0109 A00301 MOV AL,[0103] 010C 02E0 ADD AH,AL 010E 02E0 ADD AH,AL 0110 8B360401 MOV SI,[0104] 0114 8B360401 MOV SI,[0104] ---------------------------------- Symbols Name Type Value Attr ATTRIB . . . L BYTE 0103 _PROG DATOBYTE . . ALIAS ATTRIB DATOWORD . . ALIAS PAROLA INIZIO . . . .L NEAR 0100 _PROG OPCODE1 . . . TEXT MOV OPCODE2 . . . TEXT ADD PAROLA . . . L WORD 0104 _PROG  | 
      
| 
     
  | 
      
| L'analisi dei risultati (in Debug) mostra come opCode1 sia stato assunto come MOV e compilato con il medesimo codice operativo (A0), così come opCode2 è stato assunto come ADD e compilato con suo stesso codice operativo (02); in entrambi i casi questi simboli sono ritenuti di tipo TEXT. | 
| 
     
  | 
      
| I 2 alias riferiti ai nomi delle 2 variabili (datoByte per ATTRIB e datoWord per PAROLA) sono perfettamente intercambiabili e il codice prodotto è lo stesso: se andiamo ad eseguire il programma dopo le prime 2 istruzioni in AL ci sarà 0FH (valore datoByte o ATTRIB) e dopo le ultime 2 in SI ci sarà 1234H (valore di datoWord o PAROLA). | 
| 
     | 
    
  | 
  
| La direttiva = è simile, per l'effetto prodotto, alla EQU, ma è gestita dall'assemblatore in modo assolutamente diverso: mentre con la seconda non è più possibile cambiare il valore associato ad un simbolo, la = assegna ancora, la prima volta, un valore al simbolo ma permette di ridefinirlo in ogni momento! | 
| 
     
  | 
      
| Il simbolo viene ancora sostituito dall'assemblatore con un numero compreso tra 0 e 65535 (cioè con un valore numerico a 16 bit). | |||||
L'effetto di questa importante e utile
    direttiva può essere valutato osservando il codice sorgente (a sinistra) e
    il resoconto fornito dal listato (a destra):
 
 
  | |||||
| Possiamo notare che l'assemblatore compila il codice in funzione del valore corrente di alfa (nelle istruzioni MOV AL,alfa, insieme al codice operativo B0H mette prima 12H, 10H e 13H), mentre l'ultimo valore di alfa, per il listato (e quindi per MASM) è l'ultimo assegnato (13H). | 
  | 
| 
      
       |     
    Scheda n° 02 | 
      
       | 
    Pseudo Operazioni di MASM | 
     | 
    
    
     | 
    
     | 
 ||
| Scheda n° 02 - 05 | 
      
  | 
    
| 
     
  | 
  
        
  | 
    
        
  | 
    
| 
      
         
        Home 
     | 
      
  | 
    |||||||
      
  | 
       
          
        Motore Ricerca  | 
      
  |