2011-11-28 7 views
7

In MIPS, l'istruzione la si traduce in lui e ori. Tuttavia, MARS Simulator sembra non farlo affatto. Quando ho discarica il seguente codice macchina:MIPS "la" pseudo instruciton

.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: " 

ottengo:

00100000000001000010000000000000 
00100000000001010010000000101000 
10001100101001010000000000000000 

che è ovviamente. Sta scaricando la come una sola istruzione. Cosa fa MARS? Come posso farlo interpretare la come lui e ori?

Grazie,

risposta

8

Quello che sta succedendo qui è che il vostro assemblatore è la compilazione di questi la s come addi $<dest>, $0, <value>. La sequenza a due istruzioni è richiesta solo per valori che non possono essere rappresentati in un immediato a 16 bit; i valori che stai utilizzando qui sembrano 0x2000 e 0x2028, quindi si inseriscono in un'unica istruzione.

Come posso farlo interpretare la come lui e ori?

Caricare costanti più grandi. :) L'assemblatore potrebbe anche avere un'opzione per forzare l'uso della sequenza completa anche quando non è necessaria.