寄存器语法
调试器可以控制寄存器和浮点寄存器。
在表达式中使用寄存器时,应在寄存器前面添加 at 符号 ( @ ) 。 此 at sign 告知调试器以下文本是寄存器的名称。
如果使用 MASM 表达式语法,则可以省略某些非常常见的寄存器的 at 符号。 在基于 x86 的系统上,可以省略 eax、ebx、ecx、edx、esi、edi、ebp、eip 和 efl 寄存器的 at 符号。 但是,如果指定不带 at 符号的不太常见的寄存器,调试器将首先尝试将文本解释为十六进制数。 如果文本包含非十六进制字符,则调试器接下来会将文本解释为符号。 最后,如果调试器找不到符号匹配项,调试器会将文本解释为寄存器。
如果使用 C++ 表达式语法,则始终需要 at 符号。
r (Registers) 命令是此规则的例外。 调试器始终将其第一个参数解释为寄存器。 (不要求或不允许使用 at 符号。) 如果 r 命令有第二个参数,则根据默认表达式语法对其进行解释。 如果默认表达式语法为 C++,则必须使用以下命令将 ebx 寄存器复制到 eax 寄存器。
0:000> r eax = @ebx
有关特定于每个处理器的寄存器和指令的详细信息,请参阅 处理器体系结构。
基于 x86 的处理器上的标志
基于 x86 的处理器还使用多个称为 标志的 1 位寄存器。 有关这些标志以及可用于查看或更改它们的语法的详细信息,请参阅 x86 标志。
寄存器和线程
每个线程都有自己的寄存器值。 这些值在线程执行时存储在 CPU 寄存器中,在另一个线程执行时存储在内存中。
在用户模式下,对寄存器的任何引用都解释为与当前线程关联的寄存器。 有关当前线程的详细信息,请参阅 控制进程和线程。
在内核模式下,对寄存器的任何引用都解释为与当前寄存器上下文关联的寄存器。 可以设置寄存器上下文以匹配特定的线程、上下文记录或陷阱帧。 只能显示指定寄存器上下文中最重要的寄存器,并且不能更改其值。