我是集会的新手,有一个问题让我很困扰。在调试时,可以看到寄存器的值。你可以暂停执行,观察等等。我的问题是这是怎么回事。寄存器是通用的,因此每个运行的程序都可以访问和更改它们。 对寄存器的某种锁定似乎无效,因为它会使其他程序容易出错。 那么这是如何工作的呢?我们将非常感谢更有见地的答案和解释。
答案 0 :(得分:3)
答案非常简单。调试器(和/或OS相关的调试API)将寄存器的值保存在存储器中,然后获取控件并显示调试器屏幕。
稍后,当您想继续执行已调试的程序时,调试器会恢复这些值并继续执行。
如果要逐个执行指令,则会在执行的每条指令上发生这种情况。
答案 1 :(得分:1)
johnfound说的话。
程序集能够将寄存器值移动到内存(无论如何,用于x86 / x64体系结构)到堆栈上。在intel x86中,您可以使用一条指令将所有通用寄存器移动到堆栈中。
当您在汇编中编写函数时,您将自己开始保存函数中使用的寄存器的状态,并在函数结束时恢复它们。