Variabili in un programma Assembler Dichiarazione Una variabile
Variabili in un programma Assembler
• • • Dichiarazione Una variabile indica una locazione di memoria. In assembler troviamo due tipi di variabili: BYTE e WORD. Dichiarazione: <nome> DB <valore> <nome> DW <valore> Dove: DB significa Define Byte. DW significa Define Word. <nome> o è l’identificatore della variabile che è formato da lettere o cifre e deve iniziare con una lettera. o è possibile dichiarare variabili senza specificare il nome • <valore> o è un valore numerico o il simbolo "? " significa che la variabile non è inizializzata
Esempi • • var 1 DB 0 ; 1 byte con valore 0 var 2 DB 41 h ; 1 byte con valore 65 var 3 DB ‘A’ ; idem var 4 DB ? ; 1 byte non inizializzato var 5 DB 10 DUP(0) ; 10 byte inizializzati a 0 var 6 DB “ciao” ; 4 byte con i codici ascii … L’area di memoria che contiene i dati NON deve essere eseguita come codice: o o definire i dati dopo l’ultima istruzione o o mettere una istruzione di salto per non “eseguire i dati” • Nel modello COM area Dati e area Codice sono nello stesso segmento (CS = DS)
; Esempio di utilizzo variabili ; Visulizza n_cicli asterischi ; dove n_cicli e' una variabile Esempio 1 org 100 h mov ch, n_cicli ; inizializzazione contatore mov dl, '*' mov ah, 2 STAMPA: int 21 h ; visualizzo il carattere dec ch ; decremento contatore jnz STAMPA ; torna a stampare se il contatore non è 0 FINE: int 20 h ret n_cicli DB 5 ; numero di asterischi da stampare
Esempio 2 ; Esempio di utilizzo variabili ; Visulizza n_cicli volte il carattere car ; dove n_cicli e' una variabile e car e' un'altra variabile org 100 h mov ch, n_cicli ; inizializzazione contatore mov dl, car mov ah, 2 STAMPA: int 21 h ; visualizzo il carattere dec ch ; decremento contatore jnz STAMPA ; torna a stampare se il contatore non è 0 FINE: int 20 h ret n_cicli DB 5 car DB 'x' ; numero di asterischi da stampare
; Esempio di utilizzo variabili ; Visulizza n_cicli asterischi ; dove n_cicli e' una variabile org 100 h jmp INIZIO n_cicli DB 5 Esempio 3 ; numero di asterischi da stampare INIZIO: mov ch, n_cicli ; inizializzazione contatore mov dl, '*' mov ah, 2 STAMPA: int 21 h ; visualizzo il carattere dec ch ; decremento contatore jnz STAMPA ; torna a stampare se il contatore non è 0 FINE: int 20 h ret
Variabili e locazioni • L’assemblatore converte automaticamente le variabili con il loro indirizzo (offset dell’indirizzo) • Nei file. COM i registri di segmento CS e DS (Data Segment) sono inizializzati allo stesso valore. • L’assebler non è case sensitive (non distingue fra lettere maiuscole e minuscole per i nomi delle variabili) • L’emulatore permette di visualizzare una finestra di ispezione variabili
Costanti • Se i valori non devono essere modificati dopo la dichiarazione è possibile utilizzare le costanti. • Dichiarazione: o <nome> EQU <valore> • L’uso è analogo a quello delle variabili.
Indirizzo di una variabile • L’istruzione LEA permette di caricare in una variabile l’indirizzo di una variabile. • Sintassi: o LEA <registro>, <variabile> • Esempio: lea dx, messaggio … messaggio db "Saluti$” • L’istruzione equivale a: o MOV <registro>, offset <variabile>
Visualizzazione di una stringa • E’ possibile definire una stringa in memoria e visualizzarla con una sola chiamata a una servizio. • L’ultimo carattere deve essere $ (terminatore) • Servizio 9 dell’interrupt 21 • Esempio lea dx, messaggio ; carica in dx l'indirizzo di messaggio mov ah, 9 ; stampa tutto fino al carattere $ int 21 h FINE: int 20 h ret messaggio db "Saluti$"
- Slides: 10