Почему значения регистров ЦП, показанные в Visual Studio Debugger, не меняются, когда я использую другую программу (например, Windows Calculator) - PullRequest
0 голосов
/ 10 июля 2020

Я изучаю сборку и некоторые низкоуровневые вычисления в качестве забавного учебного упражнения. Если VS Studio показывает мне все доступные регистры моего процессора в Debug> Registers, то почему, когда я делаю вычисления на своем компьютере вне программы, которую я отлаживаю в VS Studio, тогда данные, показанные в регистрах, не меняются ? Правильно ли я предполагаю, что регистры необходимы для любых вычислений или операций, выполняемых компьютером? Тогда VS Studio эмулирует только регистры моего процессора, а если нет, то что на самом деле происходит?

1 Ответ

1 голос
/ 11 июля 2020

Вы видите только регистры текущего потока. Когда Windows меняет контекст на другой поток или процесс или обрабатывает прерывание, текущие регистры сохраняются, а регистры переключаемого потока восстанавливаются. Таким образом, регистры в вашем потоке не зависят от запуска других программ (за исключением программ типа отладчика).

Вдобавок каждый процесс находится в виртуальном адресном пространстве. Для многопроцессорной программы возможно настроить пространство общей физической памяти между процессами, но каждый процесс может использовать разные виртуальные адреса для одной и той же общей физической памяти.

Некоторым типам контроллеров ввода-вывода необходимо использовать физическую память для передачи. Виртуальная память блокируется, затем преобразуется в список физических адресов и длин, соответствующий 4096-байтовым страницам, используемым для виртуальной памяти. После завершения ввода-вывода виртуальная память разблокируется.

https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/using-mdls

...