![]() |
1
5
这意味着标签的16个最重要的位被设置为$1。然后,16个低有效位与16个最高有效位一起使用。 Here 您可以找到LUI指令的描述。它在寄存器上加载标签地址的16个msb位,并将16个lsb归零。 这样,您可以使用32位指令加载32位地址(在mips32中)。 它绝不是“真正的代码”。[31:16]/[15:0]部分不是有效的MIP,仅用于您了解位移动。 编辑: 作为对您的评论的回应,您必须知道要使用lui指令加载的地址。为此,您可以使用一个标签来指示所需的地址。 例如
|
![]() |
2
2
这是一个很好的问题,我在哪里找到了一个可能的解决方案。上述答案并非无条件工作。
实际上,应该可以说,您希望数据段位于何处(例如,SPIM允许您这样做)。这个
一个例子:
实际上,我不确定这是否是最好的解决方案,但它是我能想到的唯一解决方案(即使不使用虚拟寻址模式,即加载或存储指令的标签),这个想法应该有效(我的代码示例是否有效,我不知道,我还没有测试过)。 编辑: 我只是随便玩玩,发现了一个非常棒的技巧,它允许我们在寄存器中加载标签,而不需要任何伪指令和自然寻址模式。我的例子:
在SPIM中,它组装得很好!看一下内存在0x10001000,显示存储了0x10001004!这种方法在内存中创建一个指针。我建议将指针放在其他可变长度数据前面,这样您就可以轻松地计算指针的偏移量。 |
![]() |
M Rajoy · DOS中断10与AX 700 7 月前 |
![]() |
Imyaf · 在什么条件下,在组装时对“if”和“if-else”进行比较? 10 月前 |
|
Anonymous · 程序计数器的下一个指令是什么? 11 月前 |
![]() |
Daniel Langr · GCC不为类外默认复制构造函数生成机器代码 11 月前 |
![]() |
EE18 · C中字节序与尺寸组装转换的关系 11 月前 |