2013-04-11 5 views
9

Ho questo codice qui, ma non ho familiarità con la sintassi.Cosa significa `dup (?)` In TASM?

STACK16_SIZE =  100h 
stack16   db  STACK16_SIZE dup (?) 

Penso dup significa dichiariamo una variabile di tipo array, in quanto questo è uno stack, ma non sono sicuro. Che cosa significa esattamente dup in TASM?

risposta

16

STACK16_SIZE dup (?) significa duplicare i dati tra parentesi per STACK16_SIZE volte. È equivalente alla scrittura di ?, ?, ?, ?, ... (100 ore)

I dati in paren sono "dati non inizializzati". Cioè, la memoria è allocata, ma non impostata su alcun valore particolare sul carico.

L'assieme non fornisce un "tipo" di array. Se lo fa, è solo per i debugger da usare durante l'ispezione dei dati. Tuttavia, in questo snippet di codice, stack16 è un simbolo con un indirizzo che inizia un blocco di memoria di byte — che è contro-intuitivo e potenzialmente una fonte di un bug sottile. Per uno stack di CPU, deve essere definito come word a 16 bit (dw) o parole a 32 bit (dd).

+0

Ma che tipo è stack16? Vengo dallo sfondo di C, quindi stavo pensando in termini di array. O è come un segnaposto per un indirizzo di memoria? Cioè tutte le variabili in TASM sono come 'void *' e possono puntare a qualsiasi tipo di dati. Quindi qui stack16 punta al primo elemento di una matrice di 100 byte. È corretto? – sashoalm

+1

Non importa, ho trovato una buona spiegazione a http://www.csi.ucd.ie/staff/jcarthy/home/alp/alp5.html – sashoalm

+0

ARR1 DB 5 DUP (2) cosa ne pensi di questa espressione? qual è il valore all'interno della matrice? – muco

7

? significa nessun valore particolare, non inizializzato. DUP significa duplicato.

Quindi si ottengono 100h byte non inizializzati.