该引用说la(加载地址)的伪代码被转换为:
Pseudo : la $1, Label
lui $1, Label[31:16]
ori $1,$1, label[15:0]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在MARS中组装代码时,我收到错误:
"无效的语言元素:16]
如果我删除[31:16]部分,我会得到
"Label":操作数类型不正确
任何的想法?
这意味着标签的16个最重要的位设置为1美元.然后,16个较低有效位与16个最高有效位进行比较.
在这里你可以找到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
Run Code Online (Sandbox Code Playgroud)