Notice: Undefined index: arturo in /home/artupanett/domains/arturu.it/public_html/v/computer/asm/index.php on line 2
Assembly
23 May 2019 - 17:04--=[Computer]=----=[Computer]=----=[Musica]=----=[Musica]=----=[Geometra]=----=[Geometra]=----=[Download]=----=[Download]=----=[Link]=----=[Link]=----=[Articoli]=----=[Articoli]=--
Indice Computer Computer/ Programmazione/ Assembly/ Ps/ Capitolo 3/


Corpo della sezione dati

Il corpo della sezione è costituito, oltre che da eventuali direttive, da dichiarazioni di variabili (con valore iniziale). Ogni variabile è caratterizzata da un tipo, e può avere una sola componente di un certo tipo (variabili scalari) o più componenti dello stesso tipo (variabili vettoriali). Il tipo viene determinato dalla direttiva utilizzata. A ogni variabile sono associate, livello di linguaggio macchina, una o più locazioni contigue di memoria, destinate a contenere il valore dell'unica componente o delle componenti della variabile stessa. Quando vengono dichiarate più variabili, a ogni variabile sono associati gruppi di locazioni consecutive di memoria, secondo l'ordine di dichiarazione.
Molte pseudo-istruzioni per dichiarare variabili hanno la forma:
nome: .CODICE espressione...BR Il nome può essere usato nel campo operandi di un'istruzione o di un'altra pseudoistruzione. L'espressione stabilisce il valore iniziale di un componente, e vi sono tante espressioni quante sono le componenti della variabile.
Le pseudo-istruzioni utilizzate per definire caratteri, numeri naturali e interi, oppure indirizzi sono le seguenti:
.BYTE #il tipo è un numero naturale o intero a 8 bit, o un carattere .WORD #il tipo è un numero naturale o intero a 16 bit .LONG #il tipo è un numero naturale o un intero a 32 bit, o un indirizzo
Le pseudo-istruzioni utilizzate per definire le stringhe sono le seguenti
.ASCII #il tipo è una stringa, un byte un carattere .ASCIZ #il tipo è una stringa con l'aggiunta del carattere 0 in coda
Per definire una variabile vettoriale con num componenti, tutte di lunghezza lun byte (lun vale più di 8) e di valore val, si utilizza anche la pseudo-istruzione:
nome: .FILL num,lun,val
Il valore di ogni componente (campo val) è opzionale e, se non indicato (deve essere anche la virgola), viene assunto uguale a 0. Anche le componenti di una variabile vettoriale possono essere viste a loro volta come variabili scalari indipendenti aventi un loro nome: se per esempio vett è il nome di una variabile vettoriale, i=0, 1, ... è vett+(i*lun).
Per riservare un certo numero totale di byte (num_byte), come nel caso di strutture o variabili vettoriali in cui la lunghezza di ogni componente sia maggiore di 8 byte, si può usare la pseudo-istruzione:
nome: .SPACE num_byte,val_byte
Il valore di ogni byte (campo val_byte) è opzionale e, se non indicato (deve essere assente anche la virgola), viene assunto uguale a 0.
Più variabili, anche di tipo diverso, dichiarate in sequenza, possono essere viste, oltre che individuate, anche come unica variabile (la nuova variabile è una struttura, e le variabili componenti sono i campi struttura). Per ottenere questo risultato basta utilizzare una riga iniziale contenente un nome aggiuntivo (seguito dal carattere ':'), senza altra specifica: la nuova variabile si sovrappone alla variabili dichiarate nelle pseudo-istruzioni successive.
Illustriamo adesso, procedendo per esempi, le dichiarazioni delle variabili di tipo BYTE, WORD e LONG.


Variabili di tipo BYTE


Per illustrare le dichiarazioni di varibili di tipo BYTE, consideriamo il seguente esempio:
alfab: .BYTE 0x2A #variabile a 1 componente betab: .BYTE 'm,'s #variabile a 2 componenti gammab: .BYTE 'm,0x0A 0x0D #variabile a 3 componenti
La prima dichiarazione definisce una variabile scalare il cui valore iniziale è un numero naturale 0x2A. La seconda dichiarazione definisce una variabile vettoriale a due componenti, i cui valori iniziali sono, rispettivamente, la codifica ASCII a 8 bit dei caratteri 'm' e 's'. Infine, la terza dichiarazione definisce una variabile vettoriale a tre componenti, i cui valori iniziali sono, rispettivamente, la codifica ASCII del carattere 'm', il numero naturale 0x0A e il numero naturale 0x0D (codice ASCII in esadecimale dell'avanzamento di linea (LF) e del ritorno di carrello (CR)).
Come esempio d'uso della pseudo-istruzione .FILL, consideriamo le seguenti dichiarazioni di varibili:
etab: .FILL 2,1,0x3BH #varibile a 2 componenti iotab: .FILL 50,1 #varibile a 50 componenti
La prima dichiarazione definisce una varibile vettoriale a 2 componenti lunghe un byte, con valore iniziale 0x3B. La seconda dichiarazione definisce una variabile vettoriale a 50 componenti lunghe un byte, con valore inizale 0.


Variabili tipo WORD


Per illustrare le dichiarazioni di varibili tipo WORD, consideriamo il seguente esempio:
alfaw: .WORD -0x6BA9 #varibile a 1 componente betaw: .WORD 0x01B3,15 #variabile a 2 componenti gammaw: .WORD 50,2 #variabile a 50 componenti
La prima dichiarazione definisce una variabile scalare, il cui valore iniziale è il numero intero -0x6BA9. La seconda dichiarazione definisce una variabile vettoriale a 50 componenti, lunghe due byte, di valore iniziale 0.


Variabili di tipo LONG


Per illustrare le dichiarazioni di variabili di tipo LONG, consideriamo i seguenti esempi:
alfal: .LONG 0x3B124599 #varianile a 1 componente betal: .LONG alfal #variabile a 1 componente gammal: .FILL 4,4 #variabile a 4 componenti
La prima dichiarazione definisce una variabile scalare, il cui iniziale è il numero naturale 0x3B124599. La seconda dichiarazione definisce una variabile scalare il cui valore iniziale è l'indirizzo della variabile alfal. La terza dichiarazione definisce una varibile vettoriale a quattro componenti, di lunghezza 4 byte, non inizializzate.

Vai Prossimo
Vai Precedente
Vai Indice
--=[Home page]=----=[Home page]=----=[Forum]=----=[Forum]=----=[lingua]=----=[lingua]=----=[Statistiche]=----=[Statistiche]=----=[Cerca in questo sito]=----=[Cerca in questo sito]=----=[Info sul copyright]=----=[Info sul copyright]=----=[Scegli le impostazioni che preferisci]=----=[Scegli le impostazioni che preferisci]=----=[Scrivi al webmaster]=--
vPHPvHTMLvCSS