MIPS向左加载字(LWL)和向右加载字(LWR)指令的作用是什么? [英] What do the MIPS load word left (LWL) and load word right (LWR) instructions do?

查看:5
本文介绍了MIPS向左加载字(LWL)和向右加载字(LWR)指令的作用是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近一直在阅读MIPS指令集,突然发现了两条我在其他指令集中没有见过的不寻常的指令。

我环顾四周,想找出这些指令到底有什么作用的合理解释,但我所能做的就是它们以某种方式与未对齐的内存访问相关。

例如Wikipedia says

MIPS I要求所有内存访问都与其自然字边界对齐,否则会发出异常信号。为了支持高效的未对齐内存访问,存在以"Left"或"Right"为后缀的加载/存储字指令。

但没有进一步详细说明这实际上意味着什么。

我所能找到的最接近正确解释的是Dr John Lumis's website

通过使用一对特殊指令,可以仅在两条指令中加载或存储未对齐的字和双字。对于加载,LWL指令与LWR指令配对。加载指令从对齐的字读取左侧或右侧字节(寄存器的左侧或右侧),并将它们合并到目标寄存器的正确字节中。

但对我来说,这似乎只是故事的一半,我很难弄清楚确切的细节。也就是说,我很难理解哪些字节的哪些地址将被转移到哪里。

那么这些指令到底做了什么?

MIPS

应在任何<推荐答案手册中提供说明:lwr将加载值的右侧部分,而lwl将加载左侧部分

基本上对于地址A,LWL将4 - A % 4字节加载到寄存器的左侧,而LWR将剩余的A % 4字节加载到寄存器的右侧。例如,如果A=1,如下表所示

        ├ A             ┤
... ┃ 0 ┆ 1 ┆ 2 ┆ 3 ┃ 4 ┆ 5 ┆ 6 ┆ 7 ┃ ...

则第一个字包含所需值的3个字节,因此LWL将地址{1,2,3}处的3个字节加载到寄存器,然后剩余的字节将加载LWR

事实上,在Google上搜索"MIPS LWL LWR"的第一个结果给出了以下演示

  • lwr $4, 2($0)#这是一个虚拟指令,它从字节2开始读取从该位置开始的32位字。

                Memory                                Register 4
                byte 0, byte 1, byte 2, byte 3        byte 0, byte 1, byte 2, byte 3
    address 4:  4       5       6       7             A       B       C       D       before 
    address 0:  0       1       2       3             A       0       1       2       after
    
  • lwl $4, 2($0)#这是一个虚拟指令,它从字节2开始读取从该位置开始的32位字。

                Memory                                Register 4
                byte 0, byte 1, byte 2, byte 3        byte 0, byte 1, byte 2, byte 3
    address 4:  4       5       6       7             A       B       C       D       before 
    address 0:  0       1       2       3             2       3       C       D       after
    

http://db.cs.duke.edu/courses/fall02/cps104/homework/lwswlr.html


简单地说:

您给"Load Word Left"指令要加载的未对齐字的最高有效字节的有效地址,它会从包含的字中挑选出正确的字节,并将它们合并到目标寄存器的高位字节中。

"Load Word Right"的工作原理与此类似:您为其提供要加载的未对齐字的最低有效字节的有效地址,然后它从包含的字中挑选出正确的字节,并将它们合并到目标寄存器的低位字节中。

The MIPS R4000, part 6: Memory access (unaligned)


以下是MIPS32 instruction set manual

中的详细信息


MIPS IV ISA中的另一个插图

另见

需要从MIPS Release 6和向上加载和存储来支持未对齐访问,因此删除了LWL/LWR/SWL/SWR

这篇关于MIPS向左加载字(LWL)和向右加载字(LWR)指令的作用是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆