web-dev-qa-db-ja.com

TASMで「dup(?)」とはどういう意味ですか?

このコードはここにありますが、構文には慣れていません。

STACK16_SIZE    =       100h
stack16         db      STACK16_SIZE dup (?)

これはスタックなので、dupは配列型の変数を宣言することを意味すると思いますが、よくわかりません。 TASMでのdupは正確にはどういう意味ですか?

12
sashoalm

STACK16_SIZE dup (?)は、括弧内のデータをSTACK16_SIZE回複製することを意味します。 ?, ?, ?, ?, ...(100h回)を書き込むのと同じです。

括弧内のデータは「初期化されていないデータ」です。つまり、メモリは割り当てられますが、ロード時に特定の値に設定されません。

アセンブリは配列の「タイプ」を提供しません。含まれている場合、それはデータを検査するときに使用するデバッガ専用です。ただし、このコードスニペットでは、stack16はバイトのメモリブロックを開始するアドレスを持つシンボルです。これは直観に反しており、微妙なバグの原因となる可能性があります。 CPUスタックの場合、実際には16ビットワード(dw)または32ビットワード(dd)として定義する必要があります。

19
wallyk

?は特定の値がないことを意味し、初期化されていません。 DUPは重複を意味します。

したがって、初期化されていない100hバイトを取得します。

7
Alexey Frunze