MASM 式 vs. C++ 式
MASM 式の評価と C++ 式の評価の最も重要な違いは次のとおりです。
MASM 式では、シンボルの数値はそのメモリ アドレスです。 C++ 式では、変数の数値はアドレスではなく実際の値です。 データ構造には数値がありません。 代わりに、これらは実際の構造として扱われ、それに応じて使用する必要があります。 関数名またはその他のエントリ ポイントの値はメモリ アドレスであり、関数ポインターとして扱われます。 C++ データ型に対応しないシンボル (未変更のモジュール名など) を使用すると、構文エラーが発生します。
MASM 式エバリュエーターは、すべての数値を ULONG64 値として扱います。 C++ 式エバリュエーターは、数値を ULONG64 にキャストし、すべてのデータ型の型情報を保持します。
MASM 式エバリュエーターを使用すると、任意の演算子を任意の数値と共に使用できます。 演算子を不適切なデータ型と共に使用すると、C++ 式エバリュエーターによってエラーが生成されます。
MASM 式エバリュエーターでは、すべての算術演算が文字どおり実行されます。 C++ 式エバリュエーターでは、ポインターの算術演算は適切にスケーリングされ、不適切な場合は許可されません。
MASM 式では、2 つのアンダースコア ( __ ) または 2 つのコロン ( :: ) を使用して、クラスのメンバーを示すことができます。 C++ 式エバリュエーターでは、2 つのコロンの構文のみが使用されます。 デバッガーの出力では、常に 2 つのコロンが使用されます。
MASM 式では、最も一般的なレジスタを除くすべてのレジスタの前にアットマーク (@) を追加する必要があります。 この記号を省略すると、レジスタ名が 16 進数または記号として解釈される可能性があります。 C++ 式では、このプレフィックスはすべてのレジスタに必要です。
MASM 式には、ソース行への参照が含まれている場合があります。 これらの参照は、重大なアクセント ( ` ) で示されます。 C++ 式でソース行番号を参照することはできません。