当我使用另一个程序(例如 Windows 计算器)时,Visual Studio 调试器中显示的 CPU 寄存器值为何不改变?
How come the CPU register values shown in Visual Studio Debugger don't change when I use another program (eg. Windows Calculator)
我正在学习汇编和一些低级计算的东西作为一种有趣的学习练习。如果 VS Studio 在“调试”>“寄存器”中向我显示所有 CPU 的可用寄存器,那么当我在我的计算机上进行计算时,在 VS Studio 中调试的程序之外,为什么会显示数据寄存器没有改变?我是否正确地假设计算机进行的任何类型的计算或操作都需要寄存器?那么 VS Studio 是否只模拟我的 CPU 的寄存器,如果不是,那么到底发生了什么?
您只能看到当前线程的寄存器。当 Windows 将上下文更改为另一个线程或进程,或处理中断时,保存当前寄存器,并恢复被切换到的线程的寄存器。因此,线程中的寄存器不受 运行 其他程序的影响(调试器类型程序除外)。
此外,每个进程都在虚拟地址 space 上。多进程程序可以在进程之间设置共享物理内存space,但每个进程可能对相同的共享物理内存使用不同的虚拟地址。
某些类型的 I/O 控制器需要使用物理内存进行传输。虚拟内存被锁定,然后转换为物理地址和长度的列表,对应于用于虚拟内存的 4096 字节页面。 I/O完成后,虚拟内存被解锁。
https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/using-mdls
我正在学习汇编和一些低级计算的东西作为一种有趣的学习练习。如果 VS Studio 在“调试”>“寄存器”中向我显示所有 CPU 的可用寄存器,那么当我在我的计算机上进行计算时,在 VS Studio 中调试的程序之外,为什么会显示数据寄存器没有改变?我是否正确地假设计算机进行的任何类型的计算或操作都需要寄存器?那么 VS Studio 是否只模拟我的 CPU 的寄存器,如果不是,那么到底发生了什么?
您只能看到当前线程的寄存器。当 Windows 将上下文更改为另一个线程或进程,或处理中断时,保存当前寄存器,并恢复被切换到的线程的寄存器。因此,线程中的寄存器不受 运行 其他程序的影响(调试器类型程序除外)。
此外,每个进程都在虚拟地址 space 上。多进程程序可以在进程之间设置共享物理内存space,但每个进程可能对相同的共享物理内存使用不同的虚拟地址。
某些类型的 I/O 控制器需要使用物理内存进行传输。虚拟内存被锁定,然后转换为物理地址和长度的列表,对应于用于虚拟内存的 4096 字节页面。 I/O完成后,虚拟内存被解锁。
https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/using-mdls