[asm] dup(?)

0
BUFSIZE equ 50000
    buf:     db BUFSIZE dup(0) ;1
    buf:     db BUFSIZE dup(?) ;2

Przy pierwszym sposobie plik zwiększa się o ok 50kB a w drugim nie.
Wg mnie ten drugi sposób jest deklarowany podczas ładowania programu, mam racje?
Muszę się upewnić bo później się okaże że bedę miał krakse;]

0
zaqwsx napisał(a)
BUFSIZE equ 50000
buf:     db BUFSIZE dup(0) ;1 

Ten sposób powoduje wygenerowanie BUFSIZE bajtów o wartości ustalonej na 0. /niezależnie od możliwości formatu docelowego dane te są umieszczane fizycznie w pliku.

zaqwsx napisał(a)
buf:     db BUFSIZE dup(?) ;2

ten zaś rezerwuje BUFSIZE bajtów bez umieszczania ich w pliku wynikowym /o ile format docelowy to obsługuje/. Obszar ten i tak jest przez loader zerowany. Np.fasm obsługuje rezerwowanie bajtów w przystępniejszej formie:

rb BUFSIZE 
0

loader chyba tego nie zeruje, a w zasadzie lepiej na tym nie polegać.

przy sekwencji:
a: db 500 dup(0)
b: db 500 dup(?)
c: db 500 dup(0)

plik zwiększy się o 1500 bajtów, a zawartość tablicy b będzie losowa (powinna być, chociaż asemblery wypełniają to z reguły zerami).

rozmiar danych statycznych używanych przez program w danej sekcji może być większy niż fizyczny rozmiar danej sekcji - dokładnie o rozmiar danych niezainicjowanych następujących po ostatnich danych zainicjalizowanych (w danej sekcji). trochę zamotałem ;)

inaczej mówiąc działanie 'rb x' jest podobne do 'org $ + x'.

0

loader chyba tego nie zeruje, a w zasadzie lepiej na tym nie polegać.

Loader /przynajmniej windows/ zeruje, tak jest przewidziane w standardzie / z tego co pamiętam to i linux to oferował, ale mogę się mylić/. Oczywiście zgadza się, rb\db ? musi być umieszczone na końcu sekcji aby nie zwiększało rozmiaru - RawSize i VirtualSize w nagłówku.

// coś Ty namodził, ze z kafejki piszesz? - Q :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1