引用说la(加载地址)的伪代码转换为:
Pseudo : la $1, Label
lui $1, Label[31:16]
ori $1,$1, label[15:0]
但是当我尝试在MARS中组装代码时,我收到错误:
“无效的语言元素:16]
如果我删除[31:16]部分,我会
“标签”:操作数类型不正确
有什么想法吗?
答案 0 :(得分:5)
这意味着标签的16个最高有效位设置为1美元。然后,16个较低有效位与16个最高有效位进行比较。
Here你可以找到lui指令的描述。它在寄存器上加载16 msb的标签地址,并将16 lsb归零。
这样,您可以使用32位指令加载32位地址(以mips32为单位)。
它绝不是“真正的代码”。 [31:16] / [15:0]部分不是有效的mips,只是让你理解位移动。
编辑: 在回复您的评论时,您必须使用lui指令知道要加载的地址。为此,您可以使用标签来指示所需的地址。 例如
.data
my_var: .asciiz "This is a nul terminated string"
.text
andi $a0,$a0,0x0000ffff
lui $a0,my_var
ori $a0,$a0,my_var