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

L.Entisの日記: 【MASM談義】 2. 型と構造体

日記 by L.Entis
【基本データ型】

 アセンブラで扱う基本的なデータには主に以下の型があります。

     BYTE  SBYTE  WORD  SWORD  DWORD  SDWORD  QWORD
     REAL4  REAL8  REAL10

 SBYTE, SWORD, SDWORD はそれぞれ BYTE, WORD, DWORD に対する符号付きの表現形式(符号付き整数型)を表します。
 REAL4, REAL8, REAL10 は浮動小数点形式です。


【構造体】

 C 言語と同様に構造体や共用体を定義できます。

    DATA    STRUCT
        a    DWORD    ?
        b    WORD     ?
        d    WORD     ?
    DATA    ENDS

 これは C 言語の

    struct    DATA
    {
        unsigned long int     a ;
        unsigned short int    b ;
        unsigned short int    d ;
    } ;

と同じです。
 また同様に入れ子の構造体や共用体を定義できます。

    DATA    STRUCT
        UNION    a
            a1    DWORD    ?
            a2    REAL4    ?
        ENDS
        STRUCT    b
            b1    WORD    ?
            b2    WORD    ?
        ENDS
        STRUCT
            d    WORD    ?
            e    WORD    ?
        ENDS
    DATA    ENDS

 これは C 言語の

    struct    DATA
    {
        union
        {
            unsigned long int    a1 ;
            float                a2 ;
        }    a ;
        struct
        {
            unsigned short int    b1 ;
            unsigned short int    b2 ;
        }    b ;
        struct
        {
            unsigned short int    d ;
            unsigned short int    e ;
        } ;
    } ;

と同じです。


【型の定義とポインタ】

 C 言語と同様に TYPEDEF によって型を定義することが出来ます。

    PBYTE    TYPEDEF    PTR BYTE

 これは C 言語の

    typedef unsigned char *    PBYTE ;

と同じです。(型の表現において PTR はポインタを表します)

 また関数ポインタの型を表現することも出来ます。

    TypeFunc    TYPEDEF    PROTO    :PTR SDWORD, :SDWORD
    PtrFunc     TYPEDEF    PTR TypeFunc

 これは C 言語の

    typedef int (*PtrFunc)( int *, int ) ;

と同じです。(返り値の型はアセンブリ上では表現されません)

 ポインタを介して構造体のメンバにアクセスする場合、

    movsx    eax, (DATA_TYPE PTR [ecx]).member

のように記述しますが、ASSUME 文を使って

    ASSUME    ecx:PTR DATA_TYPE
    movsx     eax, [ecx].member
    ASSUME    ecx:NOTHING

と記述することも出来ます。



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

未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー

読み込み中...