Assembly-programming-assembly-variables
アセンブリ-変数
NASMは、変数のストレージスペースを予約するためのさまざまな* defineディレクティブ*を提供します。 define assemblerディレクティブは、ストレージスペースの割り当てに使用されます。 1つ以上のバイトを予約および初期化するために使用できます。
初期化されたデータ用のストレージスペースの割り当て
初期化されたデータのストレージ割り当てステートメントの構文は-
ここで、_variable-name_は各ストレージスペースの識別子です。 アセンブラは、データセグメントで定義された各変数名のオフセット値を関連付けます。
defineディレクティブには5つの基本的な形式があります-
Directive | Purpose | Storage Space |
---|---|---|
DB | Define Byte | allocates 1 byte |
DW | Define Word | allocates 2 bytes |
DD | Define Doubleword | allocates 4 bytes |
DQ | Define Quadword | allocates 8 bytes |
DT | Define Ten Bytes | allocates 10 bytes |
以下は、定義ディレクティブの使用例です-
次のことに注意してください-
- 文字の各バイトは、ASCII値として16進数で保存されます。
- 各10進数値は、16ビットのバイナリに自動的に変換され、16進数として保存されます。
- プロセッサは、リトルエンディアンのバイト順を使用します。
- 負の数は、その2の補数表現に変換されます。
- 短い浮動小数点数と長い浮動小数点数は、それぞれ32ビットまたは64ビットを使用して表されます。
次のプログラムは、定義ディレクティブの使用を示しています-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
初期化されていないデータ用のストレージスペースの割り当て
reserveディレクティブは、初期化されていないデータ用のスペースを予約するために使用されます。 予約ディレクティブは、予約するスペースの単位数を指定する単一のオペランドを取ります。 各defineディレクティブには、関連する予約ディレクティブがあります。
予約ディレクティブの5つの基本的な形式があります-
Directive | Purpose |
---|---|
RESB | Reserve a Byte |
RESW | Reserve a Word |
RESD | Reserve a Doubleword |
RESQ | Reserve a Quadword |
REST | Reserve a Ten Bytes |
複数の定義
1つのプログラムに複数のデータ定義ステートメントを含めることができます。 たとえば-
アセンブラは、複数の変数定義に連続したメモリを割り当てます。
複数の初期化
TIMESディレクティブは、同じ値への複数の初期化を許可します。 たとえば、サイズ9のmarksという名前の配列を定義し、次のステートメントを使用してゼロに初期化することができます-
TIMESディレクティブは、配列とテーブルの定義に役立ちます。 次のプログラムは、画面に9アスタリスクを表示します-
上記のコードをコンパイルして実行すると、次の結果が生成されます-