2013-04-11 6 views
9

Ich habe diesen Code hier, aber ich bin nicht mit der Syntax vertraut.Was bedeutet `dup (?)` In TASM?

STACK16_SIZE =  100h 
stack16   db  STACK16_SIZE dup (?) 

Ich denke, dup bedeutet, dass wir eine Variable vom Typ Array deklarieren, da dies ein Stapel ist, aber ich bin mir nicht sicher. Was bedeutet dup in TASM, genau?

Antwort

16

STACK16_SIZE dup (?) bedeutet, die Daten in Klammern durch STACK16_SIZE mal zu duplizieren. Es entspricht dem Schreiben ?, ?, ?, ?, ... (100h mal)

Die Daten in Parens sind "nicht initialisierte Daten". Das heißt, Speicher wird zugewiesen, aber beim Laden nicht auf einen bestimmten Wert gesetzt.

Assembly stellt kein Array "type" zur Verfügung. Wenn dies der Fall ist, können Debugger nur zur Überprüfung der Daten verwendet werden. In diesem Code-Snippet ist stack16 jedoch ein Symbol mit einer Adresse, die einen Speicherblock mit den Bytes — beginnt, der kontraintuitiv und möglicherweise eine Quelle für einen subtilen Fehler ist. Für einen CPU-Stack sollte es wirklich als 16-Bit-Wörter (dw) oder 32-Bit-Wörter (dd) definiert werden.

+0

Aber welcher Typ ist Stack16? Ich komme von C Hintergrund, also habe ich in Bezug auf Arrays gedacht. Oder ist es wie ein Platzhalter für eine Speicheradresse? I.e. Alle Variablen in TASM sind wie 'void *' und können auf jede Art von Daten zeigen. Hier zeigt stack16 also auf das erste Element eines Arrays von 100 Bytes. Ist das korrekt? – sashoalm

+1

Macht nichts, ich fand eine gute Erklärung unter http://www.csi.ucd.ie/staff/jcarthy/home/alp/alp5.html – sashoalm

+0

ARR1 DB 5 DUP (2) Was denkst du diesen Ausdruck? Was ist der Wert innerhalb eines Arrays? – muco

7

? bedeutet keinen bestimmten Wert, nicht initialisiert. DUP bedeutet duplizieren.

So erhalten Sie 100h Bytes, die nicht initialisiert sind.