为什么我们在 MIPS 中将程序计数器增加 4 而不是 32?

问题描述 投票:0回答:2

在MIPS中,我知道每条指令PC都会增加4。这是因为该字位于 32 位边界(4 个字节)上。这对我来说是有意义的,自然地我们需要通过两个连续单词的空间位置差异来增加 PC。

例如,我们可能将 0x00000000 作为 PC 值,但是当我们递增 PC 时,它会变成 0x00000004。但是,这个差异实际上是 4 位,而不是 4 个字节(32 位)。为什么是 0x00000004 而不是 0x80000000?

以二进制方式,这个问题变成: 0000 0000 0000 0000 0000 0000 0000 0000 到 0000 0000 0000 0000 0000 0000 0000 0010 与 1000 0000 0000 0000 0000 0 000 0000 0000。第二个似乎是 32 位(4 字节)与第一个相差 4 位。

我唯一能想到的是,必须将 PC 乘以 8 才能得到单词的实际起点。加4应该还不够吧?有人可以解释一下我缺少什么吗?

assembly mips cpu-architecture
2个回答
5
投票

因为机器是字节寻址的而不是位寻址的;因此加 4 会使指针前进 32 位。

地址总线需要以字节为单位的位置。无法对各个位进行寻址。

完全有可能它实际上将 PC 加 1,而寄存器中甚至不存在低两位。至少有一个处理器是这样工作的。


0
投票

每个地址(0x00000000)存储1个字节的数据,因此要获得4个字节的数据,即1条完整的指令/数据,PC需要加4,使下一条指令的地址为0x00000004,依此类推...

© www.soinside.com 2019 - 2024. All rights reserved.