汇编PC相对寻址方式

Assembly PC Relative Addressing Mode

我正在研究数据路径并且一直在尝试理解分支指令。

这就是我的理解。在 MIPS 中,每条指令都是 32 位的。这是 4 个字节。所以下一条指令将在四个字节之外。

举个例子,我说PC地址是128。我的第一个问题是理解这个128是什么意思。我目前的信念是它是内存中的一个索引,所以 128 指的是内存中的 128 个字节。因此,在数据路径中,它总是表示将 4 添加到 PC。将 4 位添加到 128 位得到 132,但这实际上现在是 132 字节(下一条指令)。这就是我理解这一点的方式。

在分支等于中,假设偏移量是二进制数 001。我知道我必须签署扩展,所以我会添加零(为了便于阅读,我将省略)。然后你向左移动两位,结果是 100。移动的目的是什么?偏移量实际上代表字节,左移代表位吗?如果是这样,将它添加到 PC 对我来说毫无意义。因为如果 PC 指的是字节索引,那么添加左移两位的偏移量就是将以字节数表示的偏移量添加到以字节数表示的 PC。如果 PC 128 实际上指的是 128 位,也就是 32 个字节,那为什么我们只加 4 就可以得到下一条指令呢?当它说 PC+4 时,这实际上意味着添加 4 个字节吗?

我的基本问题是 PC 相对寻址的工作原理、PC+4 的含义以及为什么偏移量要移动 2。

左移n位相当于乘以2n。左移 2 位乘以 4.

如果你的分支偏移量左移2,这意味着你的分支偏移量操作数是整个指令单元,而不是字节。所以一个8个操作数的分支指令意味着,跳转8条指令,也就是32字节。

MIPS 乘以 4,因为指令总是 32 位。 32 位是 4 个字节。

MIPS 指令保证从能被 4 整除的地址开始。这意味着 PC 的低两位保证始终为零,因此所有分支偏移保证低位为 00两位。因此,在分支指令中存储低两位是没有意义的。 MIPS 设计者试图最大化分支指令可以达到的范围。

PC 表示“程序计数器”。程序计数器是当前指令的地址。 PC+4 指的是当前指令后 4 个字节的地址。

分支偏移

MIPS 分支偏移量,与大多数处理器一样,是相对于分支之后 指令的地址。立即操作数为零的分支是空操作,它分支到分支之后的指令。带有符号扩展立即操作数 -1 的分支分支回到分支。

分支目标在((branch instruction address) + 4 + ((sign extended branch immediate operand) << 2))