ここにこのコードがありますが、構文に慣れていません。
STACK16_SIZE = 100h
stack16 db STACK16_SIZE dup (?)
これはスタックであるため、配列型の変数を宣言することを意味すると思いますが、よくdupわかりません。dupでは、TASM とは正確には何を意味するのでしょうか。
STACK16_SIZE dup (?)括弧内のデータを回で複製することを意味しますSTACK16_SIZE。?, ?, ?, ?,・・・(100h回)の書き込みに相当
括弧内のデータは「未初期化データ」です。つまり、メモリは割り当てられますが、ロード時に特定の値に設定されません。
アセンブリは、配列の「型」を提供しません。存在する場合は、データを検査するときに使用するデバッガー専用です。ただし、このコード スニペットのstack16は、バイトのメモリ ブロックを開始するアドレスを持つシンボルです。これは直観に反し、微妙なバグの原因となる可能性があります。CPU スタックの場合、実際には 16 ビット ワード ( dw) または 32 ビット ワード ( )として定義する必要がありますdd。
?特定の値がない、初期化されていないことを意味します。DUP重複を意味します。
したがって、初期化されていない 100h バイトが得られます。
別の例から始めましょう。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 リファレンスを参照してください。