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