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

时间:2009-10-08 02:00:18

标签: assembly mips

引用说la(加载地址)的伪代码转换为:

Pseudo : la $1, Label   

lui $1, Label[31:16]
ori $1,$1, label[15:0]

但是当我尝试在MARS中组装代码时,我收到错误:

“无效的语言元素:16]

如果我删除[31:16]部分,我会

“标签”:操作数类型不正确

有什么想法吗?

1 个答案:

答案 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