2

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 をこのアプリケーションの呼び出し元に正しく返すために、どこに保存すればよいかということです。

4

1 に答える 1