CALCOLATORI ELETTRONICI II L ASSEMBLATORE Microsoft MASM MASM Argomenti della lezione Faremo riferimento al linguaggio sorgente accettato dall assemblatore Microsoft MASM nelle versioni successive alla 6.0 Generalità Direttive Operatori Linguaggio sorgente Generalità È definito dall'assemblatore, non dal processore 1
Case sensitivity Commenti L'assemblatore non distingue tra lettere maiuscole e minuscole Tutto ciò che segue il carattere ";" sino al termine della riga corrente è considerato un commento Istruzioni e direttive ; questa riga è un commento MOV AX, 0 ;istruzione di azzeramento I programmi sorgente Assembler sono composti di: istruzioni Generano ciascuna un istruzione macchina Istruzioni e direttive I programmi sorgente Assembler sono composti di: direttive (o pseudo-istruzioni) Sono comandi per l assemblatore Istruzione Direttiva ADD AX, 0 VAR1 DB? 2
Direttive Direttive Non corrispondono a nessuna istruzione nel codice macchina Possono essere raggruppate in: direttive per la definizione di variabili direttive per la definizione di costanti direttive per la gestione dei segmenti Direttive per la definizione di variabili Direttive per la definizione di variabili Richiedono all assemblatore di riservare nel segmento dati lo spazio per una variabile Richiedono all assemblatore di associare a tale spazio un nome simbolico Direttive per la definizione di variabili Richiedono all assemblatore di eventualmente inizializzare la variabile Formato [nome] direttiva valore direttiva BYTE (DB), WORD (DW), DWORD (DD), QWORD (DQ) 3
Formato [nome] direttiva valore valore Formato [nome] direttiva valore valore un valore numerico una stringa (tra apici) il carattere? il costrutto num DUP (val) che replica num volte il valore val Direttiva DB Esempi La direttiva DB (o BYTE) permette di definire strutture dati costituite da byte È utilizzata per la memorizzazione di: caratteri stringhe numeri interi ZETA DB "Z" CITTA DB "T","o","r","i","n","o" CITTA2 DB "Torino" STR2 DB 'Programma perfetto!' SEQ DB 1, 123, 84, -10 Operatore DUP Semplifica la definizione di strutture ripetute SEQ0 DB 20 DUP (0) SEQ20 DB 20 DUP (?) DB 4 DUP ("STACK") 4
Direttiva DW Esempi La direttiva DW (o WORD) permette di definire strutture dati costituite da word (2 byte) È utilizzata per la memorizzazione di: numeri interi SEQ DW 1, 350, -4000, 1024 LISTA DB 100 DUP (?) LIST_OFF DW LISTA indirizzi di offset La direttiva DD permette di definire strutture dati costituite da doubleword (4 byte) Direttiva DD È utilizzata per la memorizzazione di: numeri interi indirizzi interi (registro di segmento e offset) TAB DD 125000 LISTA DB 100 DUP (?) LIST_ADD DD Esempi LISTA Direttive per la definizione di costanti Definiscono costanti simboliche usate durante l assemblaggio Formato simbolo EQU espressione simbolo = espressione espressione può essere un espressione intera, o un indirizzo 5
Esempi Costanti colonne EQU 80 righe EQU 25 schermo EQU colonne*righe Nel codice assembler possono comparire costanti di tipo diverso: binarie ottali 001101B 15O, 15Q Costanti Costanti Nel codice assembler possono comparire costanti di tipo diverso: Nel codice assembler possono comparire costanti di tipo diverso: esadecimali decimali 72H, 0DH, 0BEACH (devono iniziare con un numero) 13, 13D stringhe reali in base 10 S, "Ciao" 2.345925, 715E-3 Direttive per la gestione dei segmenti Permettono la definizione e la gestione dei segmenti A partire dalla versione 5.0 sono state introdotte alcune direttive (.MODEL,.DATA,.CODE,.STACK) che semplificano il problema La direttiva.model definisce le modalità generali con cui è organizzato il modulo sorgente, in particolare il modello di memoria Direttiva.MODEL 6
Formato Modelli di memoria.model modello [opzioni,...] Il modello è obbligatorio e definisce le dimensioni dei segmenti di codice e di dato Il MASM supporta i modelli di memoria standard usati dai linguaggi di alto livello Microsoft Modelli di memoria Tiny I possibili modelli di memoria sono: Tiny Small Medium Compact Large Huge Flat Dati, codice e stack sono combinati in un unico segmento È il modello dei programmi.com Small Medium Prevede Prevede un segmento per il codice ed uno per dati e stack un segmento per dati e stack, più di un segmento per il codice 7
Compact Large Prevede Prevede un segmento per il codice, più di un segmento per dati e stack più di un segmento per il codice, più di un segmento per dati e stack Huge Flat Come nel modello large, ma una singola variabile può essere più grande di un segmento Gli offset sono su 32 bit È usato in Protected Mode Direttiva END END {etichetta} Conclude un modulo di programma Se il modulo contiene la prima istruzione del programma, la relativa etichetta deve essere specificata come operando Operatori 8
Operatori Operatori Si distinguono in Si distinguono in operatori per il calcolo degli attributi di una variabile operatori aritmetici, logici e relazionali Operatori Operatore OFFSET Si distinguono in operatori che modificano il tipo di una variabile Restituisce il valore dell'offset di una variabile Formato: OFFSET variabile Operatore SEG MOV BX, OFFSET VAR Restituisce l indirizzo di inizio del segmento a cui appartiene una variabile Formato: SEG variabile 9
Operatori aritmetici, logici e relazionali MOV MOV AX, SEG VAR DS, AX Aritmetici Logici +, -, *, /, MOD AND, OR, NOT, XOR Relazionali EQ, NE, LT, LE, GT, GE Operatori aritmetici, logici e relazionali Esempi Gli operatori possono comparire esclusivamente in espressioni valutabili al tempo di assemblaggio MOV AX, 31*2 MOV AX, BX*4 ; ERRORE! Formato: Operatore PTR L operatore PTR forza l assemblatore a modificare per l'istruzione corrente il tipo di una variabile tipo PTR nome.data TOT DW?.CODE MOV BH, BYTE PTR TOT MOV CH, BYTE PTR TOT+1 10
2 2 INC [BX] La cella da incrementare corrisponde ad una word o ad un byte? Soluzione: INC BYTE PTR [BX] L assemblatore segnala errore CALCOLATORI ELETTRONICI II 11