Registersyntax
Der Debugger kann Register und Gleitkommaregister steuern.
Wenn Sie ein Register in einem Ausdruck verwenden, sollten Sie vor dem Register ein at-Zeichen ( @ ) hinzufügen. Dieses At-Zeichen teilt dem Debugger mit, dass der folgende Text der Name eines Registers ist.
Wenn Sie die MASM-Ausdruckssyntax verwenden, können Sie das at-Zeichen für bestimmte sehr häufige Register weglassen. Auf x86-basierten Systemen können Sie das at-Zeichen für die Register eax, ebx, ecx, edx, esi, edi, ebp, eip und efl weglassen. Wenn Sie jedoch ein weniger häufiges Register ohne at-Zeichen angeben, versucht der Debugger zunächst, den Text als Hexadezimalzahl zu interpretieren. Wenn der Text nicht hexadezimale Zeichen enthält, interpretiert der Debugger den Text als Nächstes als Symbol. Wenn der Debugger schließlich keine Symbol-Übereinstimmung findet, interpretiert der Debugger den Text als Register.
Wenn Sie die Syntax des C++-Ausdrucks verwenden, ist immer das At-Zeichen erforderlich.
Der Befehl r (Registers) ist eine Ausnahme von dieser Regel. Der Debugger interpretiert sein erstes Argument immer als Register. (Ein At-Zeichen ist nicht erforderlich oder zulässig.) Wenn ein zweites Argument für den r-Befehl vorhanden ist, wird es gemäß der Standardausdruckssyntax interpretiert. Wenn die Standardausdruckssyntax C++ ist, müssen Sie den folgenden Befehl verwenden, um das ebx-Register in das eax-Register zu kopieren.
0:000> r eax = @ebx
Weitere Informationen zu den Registern und Anweisungen, die für jeden Prozessor spezifisch sind, finden Sie unter Prozessorarchitektur.
Flags auf einem x86-basierten Prozessor
x86-basierte Prozessoren verwenden auch mehrere 1-Bit-Register, die als Flags bezeichnet werden. Weitere Informationen zu diesen Flags und zur Syntax, die Sie zum Anzeigen oder Ändern dieser Flags verwenden können, finden Sie unter x86-Flags.
Register und Threads
Jeder Thread verfügt über eigene Registerwerte. Diese Werte werden in den CPU-Registern gespeichert, wenn der Thread ausgeführt wird, und im Arbeitsspeicher, wenn ein anderer Thread ausgeführt wird.
Im Benutzermodus wird jeder Verweis auf ein Register als das Register interpretiert, das dem aktuellen Thread zugeordnet ist. Weitere Informationen zum aktuellen Thread finden Sie unter Steuern von Prozessen und Threads.
Im Kernelmodus wird jeder Verweis auf ein Register als das Register interpretiert, das dem aktuellen Registerkontext zugeordnet ist. Sie können den Registrierungskontext so festlegen, dass er mit einem bestimmten Thread, Kontextdatensatz oder Trapframe übereinstimmt. Sie können nur die wichtigsten Register für den angegebenen Registerkontext anzeigen, und Sie können deren Werte nicht ändern.