gpt4 book ai didi

assembly - MIPS:为什么已经有加载字时为什么需要加载字节?

转载 作者:行者123 更新时间:2023-12-04 11:48:35 25 4
gpt4 key购买 nike

在RISC MIPS指令集中,我们有加载字节(lbu),加载半字(lhu)和加载字(lw)指令。在我看来,lbulhu可以完成的所有工作都可以通过lw实现。

那么,为什么MIPS设计人员引入lbulhu?在什么情况下(最好是不起眼的情况),它们会有用吗?也许lw的执行时间要比lbu更长,即使它们都是单指令?

最佳答案

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

因此,假设您拥有位于地址0x1000的该数组:

array: .byte 0,1,2,3

然后,您想加载第二个字节( 1),它位于地址0x1001上,该地址没有字对齐。除非您从地址0x1000进行了 lw的执行,然后执行了一些移位和与操作以获得所需的字节,否则这显然是行不通的,这对于程序员而言确实是一件很麻烦的事情。

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

正如我确定的那样,每当您要处理单个字节的数据时,都必须执行这些额外的步骤,这是非常不便的-在大多数程序中,这是非常常见的操作。

关于assembly - MIPS:为什么已经有加载字时为什么需要加载字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40817954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com