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
•
•
•
•
•
•
•
var1 DB 0
;1 byte con valore 0
var2 DB 41h
;1 byte con valore 65
var3 DB ‘A’
;idem
var4 DB ?
;1 byte non inizializzato
var5 DB 10 DUP(0)
;10 byte inizializzati a 0
var6 DB “ciao”
;4 byte con i codici ascii …
L’area di memoria che contiene i dati NON deve essere
eseguita come codice:
o
o
o definire i dati dopo l’ultima istruzione
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 1
;Esempio di utilizzo variabili
;Visulizza n_cicli asterischi
;dove n_cicli e' una variabile
org 100h
mov ch,n_cicli ;inizializzazione contatore
mov dl,'*'
mov ah,2
STAMPA:
int 21h
;visualizzo il carattere
dec ch
;decremento contatore
jnz STAMPA
;torna a stampare se il contatore non è 0
FINE:
int 20h
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 100h
mov ch,n_cicli ;inizializzazione contatore
mov dl,car
mov ah,2
STAMPA:
int 21h
;visualizzo il carattere
dec ch
;decremento contatore
jnz STAMPA
;torna a stampare se il contatore non è 0
FINE:
int 20h
ret
n_cicli DB 5
car DB 'x'
;numero di asterischi da stampare
Esempio 3
;Esempio di utilizzo variabili
;Visulizza n_cicli asterischi
;dove n_cicli e' una variabile
org 100h
jmp INIZIO
n_cicli DB 5
;numero di asterischi da stampare
INIZIO:
mov ch,n_cicli ;inizializzazione contatore
mov dl,'*'
mov ah,2
STAMPA:
int 21h
;visualizzo il carattere
dec ch
;decremento contatore
jnz STAMPA
;torna a stampare se il contatore non è 0
FINE:
int 20h
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 21h
FINE:
int 20h
ret
messaggio db "Saluti$"
Scarica

ppt - Alberto Ferrari