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?