【问题标题】: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
【解决方案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 位左右。这是一个指令指针大于访问所有内存所需的示例。