配列に入力された 10 個の数値の平均を取得しようとしています。で算術オーバーフローが発生していadd $a2, $a2, $a1
ます。
何が間違っているのかわかりません。助けていただければ幸いです。
また、すぐにオーバーフローしないという理由だけで、制限を 2 つの整数に切り替えてみました。整数ではなく、アドレスを一緒に追加しています。これは、なぜオーバーフローし続けるのかについての私の推測です。ただし、アドレスを整数に変更するにはどうすればよいですか?
これが私のコードです。
.data
nums:
.word 0,0,0,0,0,0,0,0,0,0
prompt:
.asciiz "Please enter 10 positive integers:\n"
avg:
.asciiz "Avg = "
result:
.asciiz " "
.text
.globl main
main:
li $v0, 4
la $a0, prompt
syscall
li $t1, 10
la $a1, nums
getnums:
addi $t1, $t1, -1
li $v0, 5
syscall
sw $v0, ($a1)
addi $a1, $a1, 4
bnez $t1, getnums
#avg
move $a2, $zero
move $t0, $zero
addi $a1, $a1, -4
getavg:
lw $t0, 0($a1)
addi $t1, $t1, 1
add $a2, $a2, $t0 #arithmetic overflow
addi $a1, $a1, -4
bne $t1, 10, getavg
li $v0, 4
la $a0, avg
div $a2, $a2, 10
syscall
la $a0, ($a2)
li $v0, 1
syscall
li $v0, 10
syscall
(コードのフォーマットを修正するために編集 - RobertB)