MIPS:当我们已经有加载字时,为什么我们需要加载字节?

时间:2016-11-26 11:38:32

标签: assembly mips instruction-set isa

在RISC MIPS指令集中,我们有加载字节(lbu),加载半字(lhu)和加载字(lw)指令。在我看来,使用lbu可以实现lhulw所能做的一切。

那么为什么MIPS设计师会介绍lbulhu?在什么情况下(最好是非模糊的)它们可能有用吗?也许lw需要比lbu更长的时间来执行,即使两者都是单指令?

1 个答案:

答案 0 :(得分:6)

lw要求您加载的地址是字对齐的(即地址必须是4的倍数)。

所以,让我们说你有这个数组位于地址0x1000:

array: .byte 0,1,2,3

并且您想要加载第二个字节(1),它位于地址0x1001,不是字对齐的。这显然不会起作用,除非你从地址0x1000做了一个lw,然后进行了一些移位和ANDing以得到你想要的字节,这对于程序员来说真的很麻烦。

或者让我们假设您要加载0 位于字对齐的地址,并将其与某个值进行比较。因此,您从地址0x1000开始lw,但现在您的目标寄存器将包含0x000102030x03020100(取决于字节顺序),而不仅仅是0。因此,在执行比较之前,您必须按位进行AND以提取所需的字节。

我确信您可以看到,只要您想处理单个字节的数据,就必须执行这些额外的步骤会非常不方便 - 在大多数程序中这是非常常见的操作。