2016-04-09 12 views
2

Kitabı Assembly Language for x86 by Kip Irvine okudum.Kip Irvine'in derleme dili kitabında depolamayı anlamada sorun var

DUP Operatör kullanma: sayfa 85 o sembolleri kullanmak niçin hakkında aşağıdaki yazdı Section 3.4.4 diziler ve dizeleri için depolama oluşturmak için DUP operatörün nasıl kullanılacağını gösterdi. Program bakımını kolaylaştırmak için DUP tarafından kullanılan sayaç, sembolik bir sabit olmalıdır. COUNT Tanımlanmış olduysa sonraki örnekte, aşağıdaki verileri de fi nition kullanılabilir: Bu komut ne yaptığını anlamıyorum

array dword COUNT DUP(0) 

. Birisi bana bunun ne anlama geldiğini açıklayabilir mi?

+2

ile DWORD s olarak başlatıldı bayt '. – Jester

+0

Montajcınız olarak MASM (veya TASM) kullanıyor musunuz ve önce _COUNT_'ı tanımladınız mı? _COUNT_ öğesinin tanımlandığını varsayalım, sonra dizi dword COUNT DUP (0) ', 0'a başlatılan _COUNT_ _DWORD_ öğesinin bir dizisi için belleği ayırır. Bu belleğin başlangıcı için etiket" dizi "dir. –

+0

@Jester dizisi anahtar kelimedir? –

cevap

4

Oldukça basit:

.const 
    COUNT equ 10    ; sets COUNT to a value of 10 or whatever 
.data 
    array dword COUNT DUP(0) ; creates an array of DWORDs/4-byte values 

Böylece array COUNT oluşur (= 10) '0' (4 x 10 = 40 bayt) için DWORD değerleri buna eşittir.

DUP komutu, önceki veri türünün 'çoğaltılan' COUNT katı olduğunu söylüyor. Bu nedenle (sizeof (DWORD) * COUNT) ile array adlandırılan, ardından bir adres COUNT sonuçları ed DWORD s DUP bir array COUNT` dwords 'dizisi `0 olarak ayarlanır değeri 0

+0

Bunu daha basit hale getirmek mümkün mü? –

+0

Eh, bu zor. 'dizi' sadece etikettir. Ve bu etikette 4 * 10 = 40 bayt (ne olursa olsun) saklıdır. Bu 40 bayt, her biri başlangıç ​​değeri 0 olan 10 DWORD (her biri 4 bayt) olarak kabul edilir. – zx485

+0

@MokholiaPokholia: emin, sayıyı sabit kodlayın ve sonra sadece dizi: dword 10 DUP (0) '. Hala bunu istediğiniz bölüme koyduğunuzdan emin olmalısınız. ('.data',' .rodata' veya '.bss', Windows’da bir BSS varsa.) –