1

スタック ポインターを使用してレジスタ $f1 から浮動小数点数をスタックに格納しようとしています。アドレスが範囲外であるというエラーが常に発生します。それを行った後、単語をスタックからポップして画面に出力したいと思います。火星を使用しています。ここにいくつかのサンプルコードがあります。

サンプルコード

    li, $t3, 0      # set counter register
l.s $f1, zero       # load floating point 0.00 into $f1
li $sp, 252     # start the stack size
swc1 $f1, ($sp)     # store the floating point as a word in the stack
loop:
addi $sp, $sp, -4   # decrement the stack pointer
swc1 $f1, ($sp)     # store the floating point as a word in the stack   
bgt $sp, $t3, loop  # continue loop until all stack is populated

print to screen after this line

li $t2, 7
li $sp, 252     # start the stack size
lwc1 $f12, ($sp)    # pop from stack
li $v0, 2
syscall
printloop:
addi $sp, $sp, -4   # decrement the stack pointer
lwc1 $f12, ($sp)    # pop from stack
li $v0, 2       
syscall
addi $t2, $t2, -1
bnez $t2, printloop
lw $a0, newline
li $v0, 4
syscall
li $t2, 7
printloop2:
addi $sp, $sp, -4   
lwc1 $f12, ($sp)
li $v0, 2
syscall
addi $t2, $t2, -1
bnez $t2, printloop2
lw $a0, newline
li $v0, 4
syscall
li $t2, 7
printloop3:
addi $sp, $sp, -4   
lwc1 $f12, ($sp)
li $v0, 2
syscall
addi $t2, $t2, -1
bnez $t2, printloop3
lw $a0, newline
li $v0, 4
syscall
li $t2, 7
printloop4:
addi $sp, $sp, -4   
lwc1 $f12, ($sp)
li $v0, 2
syscall
addi $t2, $t2, -1
bnez $t2, printloop4
lw $a0, newline
li $v0, 4
syscall
li $t2, 7
printloop5:
addi $sp, $sp, -4   
lwc1 $f12, ($sp)
li $v0, 2
syscall
addi $t2, $t2, -1
bnez $t2, printloop5
lw $a0, newline
li $v0, 4
syscall
li $t2, 7
printloop6:
addi $sp, $sp, -4   
lwc1 $f12, ($sp)
li $v0, 2
syscall
addi $t2, $t2, -1
bnez $t2, printloop6
lw $a0, newline
li $v0, 4
syscall
li $t2, 7
printloop7:
addi $sp, $sp, -4   
lwc1 $f12, ($sp)
li $v0, 2
syscall
addi $t2, $t2, -1
bnez $t2, printloop7
lw $a0, newline
li $v0, 4
syscall
li $t2, 7   
printloop8:
addi $sp, $sp, -4   
lwc1 $f12, ($sp)
li $v0, 2
syscall
addi $t2, $t2, -1
bnez $t2, printloop8
li $v0, 10
syscall
4

1 に答える 1

0

あなたの問題は、textセグメントにスタックを設定することだと思います。この行を削除します

li $sp, 252     # start the stack size

と変更

li, $t3, 0 

subu $t3, $sp, 252

スタックが64個のアイテムでいっぱいになるまでループするようにします

于 2012-12-10T14:21:09.920 に答える