2013-03-28 2 views
1

У меня есть задание, которое должно писать гребень в MIPS. И пользователь войдет в массив и, конечно же, его размер. Когда serach для распределения кучи, я нашел системный вызов 9, однако я не мог найти способ его использовать. Я пишу это:как использовать системный вызов 9 в MIPS

li $v0, 4 
la $a0, message1 # prints the first message 
syscall 

li $v0, 5  # reads the size for the array  
syscall 

mul $t0, $v0, 4  # because array contains integer, I change them into bytes 
la $a0, $t0  # allocate the size of the array in the heap 
li $v0, 9  # now, $v0 has the address of allocated memory 
syscall 

move $v1, $v0  # Because systemcall uses $vo register, I move it to $v1 keep it safe. 

create_array: 

la $a0, message2 # prints the first message 
li $v0, 4 
syscall 

li $s0, 0   # $s1 is the index, and loop induction variable 
    li $s1, 5   # $s1 is the sentinel value for the loop 

Loop1: bge $s0, $s1, End_Loop1 

li $v0, 5   # Read integer values 
syscall 

    mul $t3, $s0, 4  # $t3 is the offset 
    add $t4, $t3, $t0  # $t4 is the address of desired index 
    sw $v0, ($t4)   # store the value in the array 
addi $s0, $s0, 1  # increment the index   
    j Loop1 

End_Loop1: 

И я получаю эту ошибку; ли ":. Слишком мало или неправильно отформатированные операнды Ожидаемый: л $ t1, ($ t2)

Как я могу использовать его и Является ли это правильный путь, чтобы создать массив

Спасибо

?.
+0

В какой строке он жалуется? – Michael

+0

@Michael "la $ a0, $ t0 # выделять размер массива в куче" – jdyg

ответ

0

Заменить

la $a0, $t0  # allocate the size of the array in the heap 

с

mov $a0, $t0 

Задача командысостоит в [L] о нажатии символа [A] символа в регистр. Например:

la $a0, message1 # prints the first message 

бы загрузить адрес в регистр message1$a0. la на самом деле является псевдо-инструкция, которая в данном случае означает:

lui $a0, message1/0x10000  # load the upper halfword of the address 
ori $a0, $a0, message1%0x10000 # OR in the lower halfword of the address 

Как вы можете себе представить, что не имеет смысла, чтобы попытаться загрузить адрес другого регистра, поскольку регистры не имеют адреса.

В то время как мы на предмет MIPS псевдо-инструкций: mov также является одним из них, и выше mov $a0, $t0 инструкция переводится в нечто вроде add $a0, $0, $t0.

Смежные вопросы