【问题标题】:Address in Program Counter Register程序计数器寄存器中的地址
【发布时间】:2021-08-22 04:30:34
【问题描述】:

我们知道程序计数器包含要执行的下一条指令的地址。我试图了解这是哪个地址 - 逻辑 (CPU) 或物理 (RAM)。

【问题讨论】:

  • 如果你处于“实模式”,那么它的物理地址。否则,它总是虚拟地址——这个时间片正在执行的进程的地址空间。

标签: cpu program-counter


【解决方案1】:

在我所知道的所有架构中,它都是一个逻辑(虚拟)地址。这确实是唯一有用的方法。您希望页面翻译像数据访问一样应用于指令提取,以便分页的所有功能都可以用于代码和数据。对于可以进行 PC 相关数据寻址的架构,您也需要虚拟地址 - 因为所有数据指令都需要进行页面转换,所以您无法对物理地址做任何有用的事情。

(只是为了承认 dirac3000 的观点——如果机器没有 MMU 或者它被禁用,比如实模式下的 x86,那么所有地址都是物理地址,并且“逻辑”和“物理”之间的区别不存在,所以这个问题变得没有实际意义。)

【讨论】:

    【解决方案2】:

    地址是虚拟的,即它包含 CPU 在那一刻看到的地址。在大多数包含 MMU 的 PC 和架构中都是如此。在微控制器(例如:Arduino CPU、STM32 等)中,程序计数器将始终包含物理地址。

    【讨论】:

      猜你喜欢
      • 2018-11-11
      • 2012-06-08
      • 2013-06-17
      • 2011-09-12
      • 2013-03-22
      • 2010-11-18
      • 2020-08-15
      • 2018-10-22
      • 2013-01-11
      相关资源
      最近更新 更多