【问题标题】:Assembly Language: Program Counter size汇编语言:程序计数器大小
【发布时间】:2011-11-08 22:27:56
【问题描述】:

程序计数器的大小由什么决定?

所以,这就是我所知道的:

内存地址寄存器(MAR)大小为log2(内存空间)。

PC大小是和每个内存地址的可寻址性一样还是和MAR一样?

例如,如果给定内存空间为 16M,并且每个内存空间都是 16 位可寻址的,那么 MAR 大小将是 24 位可寻址以指定内存地址位置。

PC 大小是 24 位(与 MAR 相同)还是 32 位(每个空间的可寻址性)?

【问题讨论】:

    标签: assembly size program-counter


    【解决方案1】:

    这完全取决于硬件设计师的心血来潮。

    【讨论】:

      【解决方案2】:

      我不知道 MAR 是什么,但通常您的 program counter (AKA instruction pointer) 寄存器大到足以寻址所有程序内存。通常。

      最初的 i80x86 CPU 将指令指针有效地分成两部分,一个段选择器和一个偏移量。访问物理内存时进入地址总线的实际地址是使用这两个部分形成的。在所谓的实寻址模式中,地址就是segment selector * 16 + offset。这 2 块是 16 位的,这种寻址方案可以让您访问大约 1MB 的内存。如果您只更改指令指针而不更改段,那么您将被限制为 64KB。还有其他具有拆分指令指针的处理器。例如,德州仪器的 TMS320C54xx。

      回到 x86... 在 64 位 x86 CPU 上,您的指令指针是 64 位长的。但是,CPU 可能不(我认为仍然不)支持完整的 64 位内存地址,仅使用低 52 位左右。这是一个指令指针大于访问所有内存所需的示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-28
        相关资源
        最近更新 更多