MIPS“la”伪指令

时间:2011-11-28 02:18:49

标签: assembly mips mars-simulator

在MIPS中,la指令会转换为luiori。但是,MARS Simulator似乎根本不这样做。当我转储以下机器代码时:

.text
    la $a0, array
    la $a1, array_size
    lw $a1, 0($a1)

.data
    array: .word 0:10
    array_size: .word 10
    message: .asciiz "The sum of numbers in array is: "

我明白了:

00100000000001000010000000000000
00100000000001010010000000101000
10001100101001010000000000000000

显然。它将la转储为一条指令。 MARS做什么?如何将la解释为luiori

谢谢,

1 个答案:

答案 0 :(得分:8)

这里发生的事情是你的汇编程序正在将这些la编译为addi $<dest>, $0, <value>。只有在16位立即数中不能表示的值才需要双指令序列;您在此处使用的值看起来像0x20000x2028,因此它们适合一条指令。

  

如何将la解释为luiori

加载更大的常量。 :)您的汇编程序也可以选择强制使用完整序列,即使它没有必要。