私はMIPSの専門家ではありません。 0と5の間の整数値をインポートする必要があります(0 < n < 5)。たとえば、nの値が> 4の場合、エラーメッセージerrorDimensionMessage
が表示され、正しい値が入力されるまで、プログラムはjal dimension
の機能を再開します。その後、正しい値(たとえば3)を入力すると、プログラムはjal exit
に入り、終了します。MIPSのネストされた関数プログラムは最下位に落ちます
(コード更新)
問題が5(エラー)の後であるが - > 3(OK)プログラムは、底部を脱落されます。 dimension
に戻ってジャンプするための正しい方法ではありません
.data
InsertDimension: .asciiz " Insert an integer (n) with value between 0 and 5 (0 < n < 5): "
errorDimensionMessage: .asciiz " Error. Matrix dimension is not valid (e.g., 0 < n < 5)\n"
messageExit: .asciiz " Exit...\n"
.text
.globl main
main:
jal dimension
jal exit
exit:
la $a0, messageExit
li $v0, 4 # print string
syscall
li $v0, 10 # loads the service that exits
syscall
dimension:
move $s0, $ra # save return address into s0
la $a0, InsertDimension
li $v0, 4 # print string
syscall
li $v0, 5 # read an integer from console and put it in $v0!
syscall
jal isValidDimension
move $ra, $s0 #restore return address that was saved into s0
jr $ra #return
isValidDimension:
move $s1, $s0 # save return address into s0
beqz $v0, errorDimension
bgt $v0, 4, errorDimension
move $s0, $s1 # save return address into s0
jr $ra #return
errorDimension:
la $a0, errorDimensionMessage
li $v0, 4 # print string
syscall
j dimension # return to dimension
ありがとう、マイケル。私はneasted関数を使用してコードを更新しましたが、まだあなたの助けをクリアしていません。 –
まあ、私が言ったように、 'jal'はここで使う正しい指示ではありません。通常のジャンプ、あるいはおそらく 'jr $ ra'を使うべきです。 – Michael
私がjr $ raを使うと、プログラムはjal出口に戻りますが、私は次元 –