汇编语言表达式

更新:2007 年 11 月

本主题适用于:

版本

Visual Basic

C#

C++

Web Developer

速成版

主题不适用 主题不适用

仅限本机

主题不适用

标准版

主题不适用 主题不适用

仅限本机

主题不适用

专业团队版

主题不适用 主题不适用

仅限本机

主题不适用

表格图例:

主题适用

适用

主题不适用

不适用

主题适用,但命令默认情况下隐藏

默认情况下隐藏的一条或多条命令。

调试器可以正确计算汇编语言表达式,但有某些限制。用于某些汇编语言表达式的语法不同于用于汇编语言开发系统(如 Microsoft Macro Assembler (MASM))中的语法。

内存运算符

内存运算符是返回直接内存操作结果的一元运算符。这些运算符主要用于调试汇编语言代码。

{BY | WO | DW} address

BY 运算符返回包含地址处的第一个字节的短整型。该运算符模拟 BYTE PTR。

WO 运算符返回包含地址处的字的值(两个字节)的短整型。该运算符模拟 Microsoft Macro Assembler 的 WORD PTR 操作。DW 运算符返回包含地址处的前四个字节的值的长整型。此运算符模拟 DWORD PTR。

用在一些示例中的 x 格式说明符导致结果以十六进制显示。

示例

  • 显示位于变量 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

变量地址

使用 C address-of 运算符 (&),而不是 MASM OFFSET 运算符。

MASM 表达式

调试器表达式

OFFSET Var

&Var

PTR 运算符

将 address-of 运算符 (&) 与类型强制转换或 BY、WO 和 DW 运算符结合使用,以替换汇编语言 PTR 运算符。

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 字符串以空字符 (ASCII 0) 结尾,因此当请求字符串显示时,调试器显示从变量的第一个子节直到内存中下一个空字节之间的所有字符。如果打算调试汇编语言程序,并且要在“监视”窗口中查看字符串,应当用一个空字符分隔字符串变量。一种查看以空终止或未终止的字符串的简便方法是使用“内存”窗口。

数组和结构元素

用 address-of 运算符 (&) 做数组名称的前缀并添加所需的偏移量。偏移量可以是表达式、数字、寄存器名称或变量。

下面的示例说明如何为字节、字和双倍长字的数组执行该操作。

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)

请参见

其他资源

本机 C++ 中的表达式