MASM 表达式求值和 C++ 表达式求值之间最重要的区别有如下几种:
- 在 MASM 表达式中,任何符号的数值都是它的内存地址。在 C++
表达式中,变量的数值就是它的实际值,不是地址。数据结构没有数值;它们必须声明为实际结构再使用。函数名或者任何其它入口点的值是内存地址,当作为函数指针。没有
C++ 数据类型与之对应的符号(例如没有修饰的模块名)会导致语法错误。
- MASM 表达式求解器把所有的数值当做 ULONG64 处理。C++ 表达式求解器把数值强制转换为 ULONG64,而且保留所有数据类型的类型信息。
- MASM 表达式求解器允许任何运算符操作任何数值。如果某个运算符使用了不恰当的数据类型,C++ 表达式求解器将产生错误。
- 在 MASM 表达式求解器中,所有算术运算都是按字面意义操作。在 C++ 表达式求解器中,指针运算会计算正确的偏移比例,执行不相符的操作会被禁止。
- MASM 表达式中既可以用双下划线(__)也可以用双冒号(::)来标志类的成员。C++
表达式求解器仅能识别双冒号语法。但调试器输出总是使用双冒号。
- 在 MASM 表达式中,建议你在大多数通用寄存器前添加 @
前缀。如果忽略该前缀,寄存器名可能被解析为十六进制数值或者符号。在 C++ 表达式中,所有寄存器都需要使用该前缀。
- MASM 表达式中可以包含源代码行数的引用,用重音符号(`)标志它们。C++ 表达式中不能引用源代码行数。
Build machine: CAPEBUILD