我们知道程序计数器包含要执行的下一条指令的地址。我试图了解这是哪个地址 - 逻辑 (CPU) 或物理 (RAM)。
答案 0 :(得分:3)
地址是虚拟的,即它包含 CPU 在那一刻看到的地址。在大多数包含 MMU 的 PC 和架构中都是如此。在微控制器(例如:Arduino CPU、STM32 等)中,程序计数器将始终包含物理地址。
答案 1 :(得分:2)
在我知道的所有架构中,它都是一个逻辑(虚拟)地址。这确实是唯一有用的方法。您希望页面翻译像数据访问一样应用于指令提取,以便所有分页功能都可以用于代码和数据。对于可以进行与 PC 相关的数据寻址的架构,您也需要虚拟地址——因为所有数据指令都需要进行页面转换,因此您无法对物理地址做任何有用的事情。
(只是承认 dirac3000 的观点 - 如果机器没有 MMU 或者它被禁用,比如实模式下的 x86,那么所有地址都是物理地址,“逻辑”和“物理”之间的区别不存在,所以这个问题变得没有实际意义。)