什么决定了程序计数器的大小?
所以,这就是我所知道的:
内存地址寄存器 (MAR) 大小为 log2(内存空间)。
PC 大小与每个内存地址的可寻址性相同还是与 MAR 相同?
例如,如果给定内存空间为 16M,并且每个内存空间是 16 位可寻址的,则 MAR 大小将是 24 位可寻址以指定内存地址位置。
PC 大小是 24 位(与 MAR 相同)还是 32 位(每个空间的可寻址性)?
什么决定了程序计数器的大小?
所以,这就是我所知道的:
内存地址寄存器 (MAR) 大小为 log2(内存空间)。
PC 大小与每个内存地址的可寻址性相同还是与 MAR 相同?
例如,如果给定内存空间为 16M,并且每个内存空间是 16 位可寻址的,则 MAR 大小将是 24 位可寻址以指定内存地址位置。
PC 大小是 24 位(与 MAR 相同)还是 32 位(每个空间的可寻址性)?
我不知道 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 位左右。这是一个示例,其中指令指针大于访问所有内存所需的大小。
这完全取决于硬件设计师的心血来潮。