? (计算表达式)

问号 (?) 命令计算并显示表达式的值。

问号本身()显示命令帮助。 表达式?命令计算给定表达式。

? Expression

参数

Expression

指定要计算的表达式。

环境

说明
模式 用户模式、内核模式
目标 实时、崩溃转储
平台 全部

注解

命令的 ? 输入和输出取决于使用的是 MASM 表达式语法还是C++表达式语法。 有关这些类型的表达式语法的详细信息,请参阅 “计算表达式 ”和 “数值表达式语法”。

如果使用 MASM 语法,输入和输出取决于当前弧度。 若要更改弧度,请使用 n (Set Number Base) 命令。

? 命令在当前线程和进程的上下文中计算表达式中的符号。

某些字符串可能包含转义,例如 \n\"\r,和 \b,旨在按字面读取,而不是由计算器解释。 如果计算器解释字符串中的转义,则计算中的错误可能会发生。 例如:

0:000> as AliasName c:\dir\name.txt
0:000> al
  Alias            Value
 -------          -------
 AliasName        c:\dir\name.txt
0:001> ? $spat( "c:\dir\name.txt", "*name*" )
Evaluate expression: 0 = 00000000

0:001> ? $spat( "${AliasName}", "*name*" )
Evaluate expression: 0 = 00000000

0:001> ? $spat( "c:\dir\", "*filename*" )
Syntax error at '( "c:\dir\", "*filename*" )

在前两个示例中,即使字符串与模式匹配,计算器也会返回值为 FALSE。 第三个,计算器无法进行比较,因为字符串以反斜杠结尾, \ 因此 \" 计算器会翻译该字符串。

若要让计算器按字面解释字符串,必须使用 @"String" 语法。 下面的代码示例显示了正确的结果:

0:000> ? $spat( @"c:\dir\name.txt", "*name*" )
Evaluate expression: 1 = 00000000`00000001

0:000> ? $spat( @"${AliasName}", "*name*" )
Evaluate expression: 1 = 00000000`00000001

0:001> ? $spat( @"c:\dir\", "*filename*" )
Evaluate expression: 0 = 00000000

在前面的示例中, $spat MASM 运算符检查第一个字符串,以确定它是否与第二个字符串的模式匹配(不区分大小写)。 有关 MASM 运算符的详细信息,请参阅 MASM 数字和运算符 主题。

另请参阅

?? (计算 C++ 表达式)

.formats (显示数字格式)

MASM 数字和运算符

C++ 数字和运算符

MASM 表达式与 C++ 表达式

混合表达式示例