16

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

STACK16_SIZE    =       100h
stack16         db      STACK16_SIZE dup (?)

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

4

3 に答える 3

23

STACK16_SIZE dup (?)括弧内のデータを回で複製することを意味しますSTACK16_SIZE?, ?, ?, ?,・・・(100h回)の書き込みに相当

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

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

于 2013-04-11T18:30:20.060 に答える
10

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

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

于 2013-04-11T18:31:23.790 に答える
10

別の例から始めましょう。20 DUP (0)「ゼロの20個の複製」と読むことができます。式全体INPUTSTR DB 20 DUP (0)は と同等INPUTSTR DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0です。

現在、 「初期化されて?いない値」を意味するため、初期化され20 DUP (?)ていない20バイトが得られます。そして、あなたが持っているこの特定のケースでは、初期化されていないバイトSTACK16_SIZE DUP (?)を取得します。STACK16_SIZE

この構文は TASM 固有ではありません。MASM もそれをサポートしています。Microsoftの公式 MASM リファレンスを参照してください

于 2014-11-06T17:53:56.983 に答える