MIPS:不使用伪代码的la指令的等价?

Meh*_*ran 3 assembly mips

该引用说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":操作数类型不正确

任何的想法?

Tom*_*Tom 5

这意味着标签的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)