MIPS で次の C プログラムを書きたいとします。
int main () {
return 5;
}
MARSで次の MIPS コードを試すと、次のようになります。
main: ADDI $v0, $zero, 5 # $v0 = 5
JR $ra # return from main()
「無効なプログラム カウンター」エラーが発生します。これは、MARS の main 関数から飛び出せないためと思われます。ということで、以下のように書き換えてみました。
main: ADDI $v0, $zero, 5 # $v0 = 5
li $v0, 10 # load 10(exit) for syscall
syscall # exit
これを実行すると、$v0 レジスタの値は 5 ではなく 10 になります。syscall を機能させるために $v0 レジスタを上書きする必要があったため、これは理解できます。私の質問は、値 5 をこのアプリケーションの呼び出し元に正しく返すために、どこに保存すればよいかということです。