variabili

10
Variabili Variabili in un programma Assembler

Upload: mariam-britt

Post on 01-Jan-2016

15 views

Category:

Documents


1 download

DESCRIPTION

Variabili. in un programma Assembler. Dichiarazione. Una variabile indica una locazione di memoria. In assembler troviamo due tipi di variabili: BYTE e WORD. Dichiarazione: DB DW Dove: DB significa D efine B yte. DW significa D efine W ord. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Variabili

VariabiliVariabiliin un programma Assembler

Page 2: Variabili

DichiarazioneDichiarazione• 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 numericoo il simbolo "?" significa che la variabile non è inizializzata

Page 3: Variabili

EsempiEsempi• 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 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)

Page 4: Variabili

Esempio 1Esempio 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,2STAMPA: 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

Page 5: Variabili

Esempio 2Esempio 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,2STAMPA: 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 car DB 'x'

Page 6: Variabili

Esempio 3Esempio 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,2STAMPA: int 21h ;visualizzo il carattere dec ch ;decremento contatore jnz STAMPA ;torna a stampare se il contatore non è 0 FINE: int 20h ret

Page 7: Variabili

Variabili e locazioniVariabili 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

Page 8: Variabili

CostantiCostanti• 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.

Page 9: Variabili

Indirizzo di una Indirizzo di una variabilevariabile

• 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>

Page 10: Variabili

Visualizzazione di una Visualizzazione di una stringastringa

• 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$"