MIPS "la" псевдоинструкция - PullRequest
       28

MIPS "la" псевдоинструкция

7 голосов
/ 28 ноября 2011

В 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?

Спасибо,

1 Ответ

8 голосов
/ 28 ноября 2011

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

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

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

...