8

在 MIPS 中,la指令转换为luiand ori。然而,火星模拟器似乎根本没有这样做。当我转储以下机器代码时:

.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作为一条指令转储。火星是做什么的?我怎样才能让它解释laluiand ori

谢谢,

4

1 回答 1

9

这里发生的是您的汇编程序将这些las 编译为addi $<dest>, $0, <value>. 只有不能用 16 位立即数表示的值才需要两个指令序列;您在此处使用的值看起来像0x2000and 0x2028,因此它们适合单个指令。

我怎样才能让它解释laluiand ori

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

于 2011-11-28T02:28:56.247 回答