2016-04-09 2 views
2

私は書籍Assembly Language for x86 by Kip Irvineを読んだ。 85ページの彼は記号を使用する理由について次のように書いた:Kip Irvineのアセンブリ言語の書籍のストレージ割り当ての問題を理解する

DUP演算子の使用:Section 3.4.4を配列や文字列の記憶を作成するためにDUP演算子を使用する方法を示しました。 DUPによって使用されるカウンタは、プログラムメンテナンスを簡素化するために、記号定数でなければなりません。 COUNTは、デFiのNEDされている場合は、次の例では、次のデータデFi回線nitionで使用することができます。私は、このコマンドが何をしているか理解していない

array dword COUNT DUP(0) 

。誰かが私にそれが何を意味するのか説明できますか?

+2

DWORDのように初期化バイト'。 – Jester

+0

アセンブラとしてMASM(またはTASM)を使用していて、最初に_COUNT_を定義しましたか? _COUNT_が定義されていると仮定すると、 'array dword COUNT DUP(0)'は、0に初期化された_COUNT_ _DWORD_要素の配列のメモリを確保します。このメモリの先頭のラベルは 'array'です。 –

+0

@Jester配列はキーワードですか? –

答えて

4

それは非常に簡単である:

.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 

だからarray数(= 10)で構成されて '0' に等しいDWORD値(4 * 10 = 40バイト)。

DUP」コマンドでは、先行するデータタイプが「重複」COUNT回であると表示されます。だから(のsizeof(DWORD)* COUNT)によってarray呼び出さ続くアドレスにCOUNT結果によって編DWORD S DUParrayはCOUNT`のダブルワード `のアレイが '0に設定された値0

+0

になります。 –

+0

それは難しいことです。 'array'は単なるラベルです。このラベルでは、4 * 10 = 40バイトが予約されています(何でも)。これらの40バイトは、10のDWORD(それぞれ4バイト)とみなされます。それぞれの初期値は0です。 – zx485

+0

@MokholiaPokholia:確かに、ハードコードして、それはちょうど '配列:dword 10 DUP(0)'です。あなたはそれが欲しいセクションに置かれていることを確認する必要があります( '.data'、' .rodata'、またはWindowsにBSSがある場合は '.bss')。 –

関連する問題