アセンブリ言語の式
更新 : 2007 年 11 月
このトピックの内容は、次の製品に該当します。
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
ネイティブのみ |
|||
Standard |
ネイティブのみ |
|||
Pro/Team |
ネイティブのみ |
表の凡例 :
対象 |
|
該当なし |
|
既定で非表示のコマンド |
デバッガは、アセンブリ言語の式を正確に評価できます。ただし、いくつかの制限事項があります。一部のアセンブリ言語式で使用される構文は、Microsoft Macro Assembler (MASM) などのアセンブリ言語開発システムで使用される構文とは異なっています。
メモリ演算子
メモリ演算子は、直接的なメモリ操作の結果を返す、単項演算子です。これらの演算子は主にアセンブリ言語コードのデバッグに使用します。
{BY | WO | DW} address
BY 演算子は、アドレスの先頭バイトの値を格納する short 型の整数を返します。この演算子は、BYTE PTR をシミュレートします。
WO 演算子は、アドレスのワード (2 バイト) の値を格納する short 型の整数を返します。この演算子は、Microsoft Macro Assembler の WORD PTR 演算子をシミュレートします。DW 演算子は、アドレスの先頭 4 バイトの値を格納する long 型の整数を返します。この演算子は、DWORD PTR をシミュレートします。
x 書式指定子が次のコード例で使われていますが、これを使うと結果が 16 進数で表示されます。
サンプル
変数 sum のアドレスの先頭バイトを表示するには、次のコードを使用します。
BY sum
変数 new_set のアドレスの先頭ワードを表示するには、次のコードを使用します。
WO new_set
変数 sum のアドレスのダブルワードを表示するには、次のコードを使用します。
DW sum
6 の変位付きの EBP レジスタによって指されるバイトを表示するには、次のコードを使用します。
BY ebp+6,x
スタック ポインタによって指されるワード (スタックにプッシュされた最後のワード) を表示するには、次のコードを使用します。
WO esp,x
ESI レジスタによって指されるダブルワードを表示するには、次のコードを使用します。
DW esi,x
レジスタ間接アドレッシング
デバッガは、レジスタによって指されるメモリ位置を示す角かっこ ([ ]) を認識しません。角かっこの代わりに、BY、WO、および DW の各演算子を使って、その場所に対応するバイト、ワード、またはダブルワードの値を参照します。
MASM 式 |
デバッガ式 |
C++ 式 |
---|---|---|
BYTE PTR [bx] |
BY ebx |
*(unsigned char) ebx |
WORD PTR [bp] |
WO ebp |
*(unsigned short *) ebp |
DWORD PTR [bp] |
DW ebp |
*(unsigned long *) ebp |
変位付きのレジスタ間接アドレッシング
変位を指定して基本、インデックス付き、または基本インデックス付きの各間接モード演算を実行するには、BY、WO、および DW の各演算子に追加指定します。
MASM 式 |
デバッガ式 |
---|---|
BYTE PTR [edi+6] |
BY edi+6 |
BYTE PTR Test[ebx] |
BY &Test+ebx |
WORD PTR [esi][ebp+6] |
WO esi+ebp+6 |
DWORD PTR [ebx][esi] |
DW ebx+esi |
変数のアドレス
MASM OFFSET 演算子の代わりに、C のアドレス演算子 (&) を使用します。
MASM 式 |
デバッガ式 |
---|---|
OFFSET Var |
&Var |
PTR 演算子
アセンブリ言語の PTR 演算子を置き換えるには、型キャストを使用するか、または BY、WO、および DW の各演算子にアドレス演算子 (&) を追加します。
MASM 式 |
デバッガ式 |
---|---|
BYTE PTR Var |
BY &Var |
*(unsigned char*) |
&Var |
WORD PTR Var |
WO &Var |
DWORD PTR Var |
DW &Var |
*(unsigned long*) |
&Var |
アセンブリ言語の文字列
変数名の後に文字列書式指定子 ,s を追加します。
MASM 式 |
デバッガ式 |
---|---|
String |
String,s |
C 文字列は null (ASCII 0) 文字で終わるので、文字列表示を要求されると、デバッガは変数の先頭バイトから、メモリ内の次の null バイトまでの文字すべてを表示します。アセンブリ言語プログラムをデバッグする場合、ウォッチ ウィンドウに文字列を表示するには、文字列変数を null 文字で区切る必要があります。null で終わる文字列または null で終わらない文字列を簡単に表示するには、[メモリ] ウィンドウを使用します。
配列の要素と構造体の要素
配列名の前にアドレス演算子 (&) を付けて、目的のオフセットを追加します。オフセットには、式、数値、レジスタ名、または変数を使用できます。
次の例は、バイト、ワード、およびダブルワードの配列の要素を指定する方法を示しています。
MASM 式 |
デバッガ式 |
---|---|
String[12] |
BY &String+12*(&String+12) |
aWords[bx+di] |
WO &aWords+bx+di*(unsigned*)(&aWords+bx+di) |
aDWords[bx+4] |
DW &aDWords+bx+4*(unsigned long*)(&aDWords+bx+4) |