【发布时间】:2016-10-18 00:50:23
【问题描述】:
我正在研究数据路径,并且一直在尝试理解分支指令。
这就是我所理解的。在 MIPS 中,每条指令都是 32 位的。这是 4 个字节。所以下一条指令将在四个字节之外。
就例子而言,我说PC地址是128。我的第一个问题是理解这个128是什么意思。我目前的信念是它是内存中的一个索引,所以 128 是指内存中的 128 个字节。因此,在数据路径中,它总是说要向 PC 添加 4。将 4 位添加到 128 位得到 132,但这实际上是现在的 132 个字节(下一条指令)。我是这样理解的。
在分支等于中,假设偏移量是二进制数 001。我知道我必须扩展符号,所以我会添加零(为了便于阅读,我将省略)。然后你左移两个,结果是 100。这个移位的目的是什么?偏移量实际上是否代表字节,而左移将代表位?如果是这样,将其添加到 PC 对我来说毫无意义。因为如果 PC 指的是字节数,那么添加向左移动 2 的偏移量就是将字节数的偏移量添加到以字节数为单位的 PC 上。如果 PC 128 实际上指的是 128 位,即 32 个字节,那么为什么我们只在其上加 4 来执行下一条指令呢?当它说 PC+4 时,这实际上意味着添加 4 个字节吗?
我的基本问题是 PC 相对寻址的工作原理、PC+4 的含义以及偏移量为何移动 2。
【问题讨论】:
-
“将 4 位添加到 128 位中得到 132” 这在这里完全不相关(尽管在数学上是正确的)。 PC 是 32 位的,你正在向它添加值 4,而不是位大小。而这里“偏移量实际上代表字节,左移将代表位”你再次以混乱的方式进入“位”。位/字节只是考虑一些数值的一种方式,即。值 12 可以表示 12 条指令或 12 字节(3 instr),或者您可以将其视为 1100 位掩码,但它仍然是相同的数字 12。移位在位级别(二进制格式)很容易想象,但是影响价值。 12>>1 = 0110b = 6.
标签: assembly mips pipeline cpu-architecture