2013-04-11 9 views
9

Mam ten kod tutaj, ale nie jestem obeznany ze składnią.Co oznacza "dup (?)" W TASM?

STACK16_SIZE =  100h 
stack16   db  STACK16_SIZE dup (?) 

myślę dup oznacza deklarujemy zmienną typu tablicy, jak to jest stos, ale nie jestem pewien. Co dokładnie oznacza dup w TASM?

Odpowiedz

16

STACK16_SIZE dup (?) oznacza powtórzenie danych w nawiasach przez STACK16_SIZE razy. Jest to równoważne pisaniu ?, ?, ?, ?, ... (100 godzin razy)

Dane w parens to "niezainicjalizowane dane". Oznacza to, że pamięć jest alokowana, ale nie jest ustawiona na żadną konkretną wartość podczas ładowania.

Zestaw nie zawiera tablicy "typ". Jeśli tak, to tylko w przypadku debugerów do użytku podczas kontroli danych. Jednak w tym fragmencie kodu, stack16 jest symbolem z adresem rozpoczynającym blok pamięci od bajtów —, który jest sprzeczny z intuicją i potencjalnie źródłem subtelnego błędu. Dla stosu procesora naprawdę powinno być zdefiniowane jako 16-bitowe słowa (dw) lub 32-bitowe słowa (dd).

+0

Ale jaki typ ma stack16? Pochodzę z tła C, więc myślałem w kategoriach tablic. Czy jest to jak symbol zastępczy dla adresu pamięci? To znaczy. wszystkie zmienne w TASM są podobne do 'void *' i mogą wskazywać na dowolny rodzaj danych. Tak więc stack16 wskazuje na pierwszy element tablicy o wielkości 100 bajtów. Czy to jest poprawne? – sashoalm

+1

Nieważne, znalazłem dobre wyjaśnienie na http://www.csi.ucd.ie/staff/jcarthy/home/alp/alp5.html – sashoalm

+0

ARR1 DB 5 DUP (2) co myślisz o tym wyrażeniu? jaka jest wartość wewnątrz tablicy? – muco

7

? oznacza brak konkretnej wartości, niezainicjowanej. DUP oznacza duplikat.

Otrzymujesz 100h bajtów, które nie zostały zainicjalizowane.