パスワードを忘れた? アカウント作成
65134 journal

L.Entisの日記: 【MASM談義】 6. マクロ関数

日記 by L.Entis
 マクロ関数は値(リテラル文字列)を返すマクロです。
 これは C 言語の #define ディレクティブに似ています。

 基本的に通常のマクロと同じ記述を用いますが、マクロが返す値は EXITM で記述します。

 例えば、階乗を計算するマクロ関数は

    factorial    MACRO    num:REQ
            IF    (num) LE 1
                EXITM    <1>
            ENDIF
            EXITM    %(factorial( %((num) - 1) ) * (num))
        ENDM

と記述することが出来、例えば

    mov eax, factorial(4)



    mov eax, 24

と同じ意味です。

 以下のマクロ関数はシステムで定義されています。

    @CatStr  @InStr  @SizeStr  @SubStr

 例えば

    REG_NAME_0    TEXTEQU    <eax>
    REG_NAME_1    TEXTEQU    <ebx>
    REG_NAME_2    TEXTEQU    <ecx>
    REG_NAME_3    TEXTEQU    <edx>

    @reg    MACRO    reg_num:REQ
            IF    ((reg_num) LT 0) OR ((reg_num) GT 3)
                .ERR
            ENDIF
            EXITM    @CatStr( <REG_NAME_>, %(reg_num) )
        ENDM

    mov    @reg(0), @reg(1)



    mov    eax, ebx

と展開されます。
(@CatStr マクロは、二つのリテラル文字列を結合します)



▼ 【MASM談義】 0. 導入編
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

ハッカーとクラッカーの違い。大してないと思います -- あるアレゲ

読み込み中...