2016-02-25 5 views
0

Я начиная с MIPS, и я должен сделать простую программуMIPS ошибка после сборки

.text #text section 
.globl main #call main by MARS 
main: 
addi $t1, $0, 10 #load immediate value (10) 
addi $t2, $0, 11 #load immediate value (11) 
add $t3, $t1, $t2 #add two numbers into $t3 
jr $ra #return from main; return address 

Он монтирует без ошибок, но когда я нажимаю играть это дает мне эту ошибку

Ошибка в: недопустимое значение счетчика программ: 0x00000000

Перейти: выполнение завершено с ошибками.

Я не знаю, что именно это означает, кто-нибудь может помочь?

+0

Средства выполнения каким-то образом достигли адреса '0'. Программа выглядит нормально. – Jester

ответ

-1
jr $ra #return from main; return address 

Куда вы направляетесь? Ваш основной метод не был вызван другим методом, поэтому, когда вы пытаетесь вернуться к адресу, нет обратного адреса, потому что вы не совершили прыжок. Удалите эту строку, и она должна работать.

1

SPIM размещает вид crt0 впереди вашего кода. То есть, небольшой фрагмент кода, который сделает JAL на ваш main, и если вы вернетесь к коду запуска, он выполнит системный вызов 10 для завершения программы.

MARS с другой стороны не размещает такой код перед кодом. Таким образом, вы вернетесь в «никуда», когда вы сделаете jr $ra с основного. Вместо этого вы должны закончить свою программу системным вызовом 10, то есть

# instead of jr $ra, do: 
li $v0, 10 
syscall