装配PC相对寻址模式

时间:2016-10-18 00:50:24

标签: assembly mips pipeline cpu-architecture

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

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

就例子而言,我说PC地址是128.我的第一个问题是理解这128意味着什么。我目前的信念是它是内存中的索引,因此128指的是内存中的128个字节。因此,在数据路径中,它总是说要向PC添加4。向128位添加4位使得132,但实际上这是132字节(下一条指令)。这是我理解这一点的方式。

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

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

1 个答案:

答案 0 :(得分:3)

向左移位n位与将数字乘以2 n 相同。左移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))