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. 導入編
アセンブラで扱う基本的なデータには主に以下の型があります。
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. 導入編
【MASM談義】 2. 型と構造体 More ログイン