3

私は現在、MIPS プロセッサの下でアセンブリ言語を使用しています。現在、MARS シミュレーターを使用していますが、理由は不明ですが、実行するたびに次のエラー メッセージが表示されます。

Go: try.s の実行

エラー: 無効なプログラム カウンタ値: 0

Go: 実行はエラーで終了しました。

使用しているコードとは関係なく、このエラー メッセージが表示されます。これが MARS シミュレーターのバグなのか、それとも私が見逃しているものなのか疑問に思っているだけです。

4

3 に答える 3

9

jr $raおそらく、 (return to caller)でプログラムを終了します。ただし、MARS によって実行されるコードには呼び出し元がありません。起動時に実行され、戻る関数がないため、の内容$raはゼロです。

MARS でプログラムを終了する正しい方法は、「exit」syscall を使用することです。

    li $v0, 10
    syscall
于 2010-11-14T01:32:20.830 に答える
6

私は MIPS を初めて使用し、この問題が発生しました。これは私が持っていたものです:

    .data

    .text

swap:
    # do stuff
    jr  $ra

main:
    # do stuff
    jal swap
    li  $v0,10
    syscall

これを次のように変更して修正しました。

    .data

    .text
main:
    # do stuff
    jal swap
    li  $v0,10
    syscall

swap:
    # do stuff
    jr  $ra

main をスワップ前に移動したことに注意してください。main は予約済みのラベルだと誤解していました。そして、最初に自動的にメインに直接ジャンプします。しかし、メインで jal swap を呼び出す前に jr $ra 命令を実行していたため、そうではないようです。

とにかく、これが役立つことを願っています。

于 2011-02-03T00:43:30.797 に答える
3

私はこの質問が古いことを知っていますが、私のようで必死に答えを探していた人は誰でも: return の代わりに上記の syscall を試し、メイン関数を他のすべてのラベルの前に置いてみてください。また、設定メニューの下に「定義されている場合はグローバル「メイン」へのプログラムカウンターの初期化」があります。がチェックされていることを確認してください。これを有効にすると、メイン ラベルを他のラベルの後に配置できるかどうかはわかりません。まだ試していないからです。私が説明したことは、それを機能させるために私がしたことであり、他には何もありません。幸運を!

于 2011-10-01T21:38:12.733 に答える