Como faço para retornar um valor da função principal no MIPS?

Digamos que eu queira escrever o seguinte programa em C no MIPS:

int main () {
  return 5;
}

Quando eu tento o seguinte código MIPS emMARS:

main:   ADDI $v0, $zero, 5     # $v0 = 5
        JR $ra                 # return from main()

Eu recebo um erro de 'contador de programa inválido'. Isto é aparentemente porque vocênão pode saltar da função principal no MARS. Então eu tentei reescrever assim:

main:   ADDI $v0, $zero, 5     # $v0 = 5
        li $v0, 10             # load 10(exit) for syscall
        syscall                # exit

Depois de executar isso, o registrador $ v0 contém o valor 10, não 5. O que é compreensível, uma vez que eu tive que sobrescrever o registro $ v0 para que o syscall funcionasse. Minha pergunta, então, é onde eu salvaria o valor 5 para que ele seja retornado para o chamador desse aplicativo corretamente?

questionAnswers(1)

yourAnswerToTheQuestion