2

我是组装新手,有一个问题让我很困扰。调试时,可以看到寄存器的值。您可以暂停执行、观察等。我的问题是这怎么可能。寄存器是通用的,因此每个正在运行的程序都可以访问和更改它们。对寄存器的某种锁定似乎无效,因为它会使其他程序容易出错。那么这是如何工作的。更深入的答案和解释将不胜感激。

4

2 回答 2

3

有非常简单的答案。调试器(和/或依赖于操作系统的调试 API)将寄存器的值保存在内存中,然后控制并显示调试器屏幕。

稍后,当您想继续执行被调试程序时,调试器会恢复值并继续执行。

如果您想逐条执行指令,这会发生在每条执行的指令上。

于 2013-09-15T09:45:46.237 回答
1

johnfound 所说的。

程序集能够将寄存器值移动到内存(无论如何对于 x86/x64 架构)到堆栈上。在 intel x86 中,您可以使用一条指令将所有通用寄存器移动到堆栈中。

当您开始在汇编中编写函数时,您将开始自己保存在函数中使用的寄存器的状态,并在函数结束时恢复它们。

于 2013-09-15T09:52:39.877 回答