flo*_*w2k 7 assembly mips instruction-set isa
在RISC MIPS指令集中,我们有load byte(lbu),load half word(lhu)和load word(lw)指令.在我看来,一切lbu并lhu能做到可以实现lw.
那么为什么MIPS设计师会介绍lbu和lhu?在什么情况下(最好是非模糊的)它们可能有用吗?也许lw需要比lbu执行更长的时间,即使两者都是单指令?
lw 要求您加载的地址是字对齐的(即地址必须是4的倍数).
那么让我们说你有这个数组位于地址0x1000:
array: .byte 0,1,2,3
Run Code Online (Sandbox Code Playgroud)
并且您希望加载第二个字节(1),它位于地址0x1001,它不是字对齐的.这显然是行不通的,除非你lw从地址0x1000 做了一个然后执行了一些移位和AND运算来得到你想要的字节,这对程序员来说真的很麻烦.
还是让我们说你要加载0,这是位于字对齐的地址,并将其与一些价值.所以你lw从地址0x1000开始,但现在你的目标寄存器将包含0x00010203或0x03020100(取决于字节顺序)而不仅仅是0.因此,在执行比较之前,您必须执行按位AND以提取所需的字节.
我确信你可以看到,只要你想处理单个字节的数据就必须做这些额外的步骤是非常不方便的 - 在大多数程序中这是一个非常常见的操作.