2011-11-28 46 views
7

W MIPS instrukcja la przekłada się na lui i ori. Jednak MARS-symulator nie wydaje się, aby to zrobić w ogóle. Kiedy zrzucić następujący kod maszyny: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: " 

uzyskać:

00100000000001000010000000000000 
00100000000001010010000000101000 
10001100101001010000000000000000 

co jest oczywiście. To jest zrzutowanie la jako jednej instrukcji. Co robi MARS? Jak mogę go interpretować jako la jako lui i ori?

Dziękuję

Odpowiedz

8

Co tu się dzieje jest to, że kompilator kompiluje te la s jako addi $<dest>, $0, <value>. Sekwencja z dwiema instrukcjami jest wymagana tylko dla wartości, które nie mogą być reprezentowane w 16-bitowej kolejności; wartości, których używasz, wyglądają jak 0x2000 i 0x2028, więc mieszczą się w pojedynczej instrukcji.

Jak mogę to zinterpretować la jako lui i ori?

Załaduj większe stałe. :) Twój asembler może również mieć opcję wymuszenia użycia pełnej sekwencji, nawet gdy jest to niepotrzebne.