L.Entisの日記: 【MASM談義】 3. 定数、テキストマクロ
日記 by
L.Entis
【定数式】
アセンブラで記述される数式は、(メモリアドレスを計算するもの以外は)大抵定数を表す式です。
例えば、
shl eax, 1+2
の「1+2」は「3」という即値となります。
MASM の定数式で使える演算子には
+ - * / MOD AND NOT OR SHL SHR XOR
EQ GE GT LE LT NE OFFSET SIZEOF
等があります。
命令と演算子を混同しないようにしましょう。
(例) test eax, (1 SHL 16) ; 第16ビットをテスト
MASM で扱う式には他に、リテラル文字列を生成するものや、アドレス式、ランタイム条件式(後述)と言ったものがあります。
【リテラル文字列】
リテラル文字列とは、マクロの中では文字列のように扱われ、文の中ではリテラルとなるアイテムです。
リテラル文字列は
<text>
のように <> 演算子で囲んで記述します。
! 記号は文字リテラルを生成する演算子で、
<a !> b>
は、「a > b」という文字列のリテラルを生成します。
式の評価値をリテラル文字列に変換するには % 演算子を用います。
例えば、%(16*3) は <48> と同じ意味になります。
【定数とテキストマクロ】
シンボルに定数や文字列を割り当てる機能はアセンブラの古典的な機能の一つです。
MASM6 では、明示的に定数とテキストマクロを使い分けることができます。
例えば、
@NUMBER EQU 123
MOVE TEXTEQU <mov>
と定義しておいて、
MOVE eax, @NUMBER * 2
と記述すると
mov eax, 246
のように解釈されます。
また、= 記号でも定数を定義できますが、これは再定義可能なので変数のように扱えます。
例えば、
@NUMBER = 123
mov eax, @NUMBER
@NUMBER = @NUMBER * 2
mov eax, @NUMBER
は、
mov eax, 123
mov eax, 246
と解釈されます。
▼ 【MASM談義】 0. 導入編
アセンブラで記述される数式は、(メモリアドレスを計算するもの以外は)大抵定数を表す式です。
例えば、
shl eax, 1+2
の「1+2」は「3」という即値となります。
MASM の定数式で使える演算子には
+ - * / MOD AND NOT OR SHL SHR XOR
EQ GE GT LE LT NE OFFSET SIZEOF
等があります。
命令と演算子を混同しないようにしましょう。
(例) test eax, (1 SHL 16) ; 第16ビットをテスト
MASM で扱う式には他に、リテラル文字列を生成するものや、アドレス式、ランタイム条件式(後述)と言ったものがあります。
【リテラル文字列】
リテラル文字列とは、マクロの中では文字列のように扱われ、文の中ではリテラルとなるアイテムです。
リテラル文字列は
<text>
のように <> 演算子で囲んで記述します。
! 記号は文字リテラルを生成する演算子で、
<a !> b>
は、「a > b」という文字列のリテラルを生成します。
式の評価値をリテラル文字列に変換するには % 演算子を用います。
例えば、%(16*3) は <48> と同じ意味になります。
【定数とテキストマクロ】
シンボルに定数や文字列を割り当てる機能はアセンブラの古典的な機能の一つです。
MASM6 では、明示的に定数とテキストマクロを使い分けることができます。
例えば、
@NUMBER EQU 123
MOVE TEXTEQU <mov>
と定義しておいて、
MOVE eax, @NUMBER * 2
と記述すると
mov eax, 246
のように解釈されます。
また、= 記号でも定数を定義できますが、これは再定義可能なので変数のように扱えます。
例えば、
@NUMBER = 123
mov eax, @NUMBER
@NUMBER = @NUMBER * 2
mov eax, @NUMBER
は、
mov eax, 123
mov eax, 246
と解釈されます。
▼ 【MASM談義】 0. 導入編
【MASM談義】 3. 定数、テキストマクロ More ログイン