在MIPS中,la
指令会转换为lui
和ori
。但是,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
解释为lui
和ori
?
谢谢,
答案 0 :(得分:8)
这里发生的事情是你的汇编程序正在将这些la
编译为addi $<dest>, $0, <value>
。只有在16位立即数中不能表示的值才需要双指令序列;您在此处使用的值看起来像0x2000
和0x2028
,因此它们适合一条指令。
如何将
la
解释为lui
和ori
?
加载更大的常量。 :)
您的汇编程序也可以选择强制使用完整序列,即使它没有必要。