我一直在研究汇编语言的工作原理,因为我想了解我的计算机在 CPU 寄存器/硬件级别上实际发生的复杂而奇特的事情。有什么方法可以查看正常使用计算机时发生了什么吗?
我想了解,当我浏览互联网或玩游戏等时,各种寄存器中进出的内容是什么。尽管我可以观看,但我不确定如何将其与我可以看到在更高级别发生的特定计算相关联。也就是说,我不知道如何知道此时进入此寄存器的十六进制代码是否与 Firefox 处理 SSL 加密等有关。
答案1
您意识到这些 CPU 的运行速度为 3GHz 左右 - 如果您想实时运行,您的(或我的)弱小的大脑根本无法跟上。
还有一点小问题:你不用看 CPU 上的汇编程序,而是去掉一些信息直接进入机器代码。没有“分支到打印例程”,而是“分支到位置 227015ED42AB12F2 或其他什么位置”。你必须记住那个位置的作用。再一次,你的神经网络不堪重负。你必须“反向组装”正在发生的事情才能理解它。非常困难。
话虽如此,但还是有一些选项不能完全满足您的要求。
1) 获取调试器,在调试器下运行程序。它们通常显示机器代码/汇编代码(它们使用 C 符号,就像汇编程序一样)。这将显示一些信息,但请记住,即使是一个简单的程序也可能有数百万甚至数十亿条指令。当您获得机器代码时,源代码已被编译、优化并与系统库链接。这将很难。
2) 寻找模拟器。这些模拟器将显示代码子集并运行得更慢,这是您可以跟上的。我有一台 C64 和一台 Atari 800,并且玩过 Apple,所以虚拟 6502我觉得很有趣。
我还建议,如果您想了解算法,查看源代码运行(而不是机器代码)可能是您想要尝试的级别。
答案2
你可以用调试器逐条调试单个程序,一次一条指令,检查寄存器内容,但除非这是你编写或非常了解的程序,否则这样做毫无意义。要观察机器正在做的所有事情,你需要两台机器,一台运行内核调试器对另一台进行调试。但对于大多数用户来说,这也不太可能有意义,甚至不切实际。