MIPS" la " псевдо-инструктаж

в 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 как одна инструкция. Что делает Марс? Как я могу заставить его интерпретировать la as lui и ori?

спасибо,

1 ответов


здесь происходит то, что ваш ассемблер компилирует эти las as addi $<dest>, , <value>. Последовательность двух инструкций требуется только для значений, которые не могут быть представлены в 16-битном немедленном; значения, которые вы используете здесь, выглядят как 0x2000 и 0x2028, поэтому они вписываются в одну инструкцию.

как я могу заставить его интерпретировать la as lui и ori?

загрузить больше константы. :) ваш ассемблер также может иметь возможность заставляйте использовать полную последовательность, даже если это не нужно.