|
 |
Le
PseudoOperazioni di MASM |
SCHEDA n° 02 [
10
di 26] |
|
|
 |
Aggiornato 11 maggio 2007 |
 |
|
Gestione dei Dati - DB,
DW |
|
 | Cominciamo con i dati a 8 bit
(byte), definiti cioè con DB
(Define Byte); nonostante l'apparenza l'assemblatore riserva per essi
uno o più bytes di memoria, di solito inizializzati con valori che rappresentano
numeri interi, stringhe
con uno o più caratteri, espressioni costanti (come 5*2):
ATTRIB DB 0FH ;numero esadecimale
datoB DB
15
;numero decimale
binarioB DB 00001111B
;numero binario
ignotoB DB ?
;dato non inizializzato
;----------------------------------------
testo DB 'Esempio di testo',00H ;stringa Ascii
;----------------------------------------
tabella DB 01,' Lunedì',00H ;
DB 03,'Mercoledì',00H
; tabella
DB 02,' Martedì',00H
;
tabellaB DB 01H, 02H, 03H, 04H ; 4 dati a 8 bit
;----------------------------------------
areaZerB DB 16 DUP (00H) ;16 bytes a 0
areaTxt DB 16 DUP ('GIO_2001');16*8 caratteri |
 | i primi 3 sono esprimono lo stesso numero
in esadecimale, in decimale e in binario; notare la H
finale nel primo e la B finale nel
terzo, mentre nel secondo non è necessario aggiungere nulla. |
 | il dato successivo è certamente a 8 bit
ma il suo valore non è inizializzato:
spetta alle istruzioni del programma dare valore iniziale al contenuto
di questa locazione, a dimostrazione del fatto che tutti i dati che
stiamo descrivendo sono sostanzialmente variabili. |
 | l'etichetta testo
mostra una stringa terminata con un byte a 0:
anche le sequenze di caratteri Ascii sono dunque di tipo byte: ciascun
carattere è infatti associato ad un byte. La stringa può essere lunga
fino alla fine della linea. |
 | l'etichetta tabella
mostra la tecnica migliore per definire serie
di dati, anche costituite, come in questo caso, da più tipi;
naturalmente nel caso di una sequenza di numeri (come per tabellaB)
la dimensione per ciascuno di essi è 8bit. Da notare la necessità di
definire solo un'etichetta: l'inizio di ogni "voce"
delle tabelle è facilmente ricostruibile con una semplice somma. Da
notare anche che gli elementi di ogni riga sono separati
da una virgola. |
 | le 2 definizioni successive sono
particolarmente degne di nota per la presenza dell'operatore
DUP: all'etichetta areaZero
corrisponde una zona di 16 bytes a 0 e a areaTxt
un'area di 128 bytes contenente 16 volte gli otto bytes della stringa
Ascii 'GIO_2001. |
|
 | I dati a 16 bit (word)
sono definiti con DW (Define
Word); per essi l'assemblatore riserva uno spazio pari a multipli
di 2 bytes, di solito inizializzati con valori che
rappresentano numeri interi, stringhe
da uno o 2 caratteri Ascii (come 'ab'), espressioni
costanti (come 5*2):
RamVideo DW 0B800H
;numero esadecimale
datoW DW
47104
;numero decimale
binarioW DW 1011100000000000B;numero binario
ignotoW DW ?
;dato non inizializzato
;----------------------------------------
testo DW 'ab'
;max 2 char Ascii
;----------------------------------------
tabellaW DW 0001H, 0002H, 0003H; 3 dati a 16 bit
;----------------------------------------
areaZerW DW 8 DUP (0000H) ;8 word a 0 |
Valgono le medesime osservazioni specificate per
DB; in aggiunta ricordiamo che vale la regola
Lo-Hi, per cui
 | di ogni word è inserita in memoria prima
la parte bassa (nella locazione
puntata dall'etichetta) e poi la parte alta
(nella locazione successiva). |
 | se il dato è una stringa di 2 caratteri
(nell'esempio 'ab') il carattere a destra ('b') è posto nella locazione
puntata dall'etichetta, mentre il primo ('a') è messo nella locazione
successiva. |
 | se il dato è una stringa di un carattere
(per esempio 'a'): in questo l'unico carattere ('a') è posto nella
locazione puntata dall'etichetta, mentre nella locazione successiva è
inserito uno 0. |
|
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|