2012-04-15 9 views
-1

私はこの宿題に問題があります。シーケンスをMIPSの配列に保存するにはどうすればよいですか?

次のシーケンスを生成するプログラムを作成します。 1,2,2,4,8,32,256、...とし、ユーザーが選択した用語の数に応じて配列に格納します。シーケンス内の各要素は、その前の2つの要素を掛けることによって計算できます。換言すれば、n番目のシーケンス番号Snは、Sn = Sn-1×Sn-2の式によって計算される。

は私がしようとしたが、それは実行されませんでした

私のコード

^ ^

# UNTITLED PROGRAM 

    .data # Data declaration section 
str1: .ascii "Please enter the number of terms to produce: " 
arr: .space 40 

    .text 

main:  # Start of code section 


li $v0, 4 # system call code for printing string = 4 
la $a0, str1 # load address of string to be printed into $a0 
syscall   # call operating system to perform print operation 


li $v0, 5 # get ready to read in integers 
syscall  # system waits for input 
move $s0,$v0 # store the result of the read (returned in $v0) in num1 


la $s1,arr 
addi $t2,$zero,2 # i=2 
addi $t0,$zero,1 
add $t1,$t0,$t0 
sw $t0,0($s1) 
sw $t1,0($s1) 

L1: 
addi $t2,$t2,1  #i++ 
addi $s1,$s1,4 
lw $t4,0($s1)  #A[i-1] 
lw $t5,4($s1) 
mul $t3,$t4,$t5 
sw $t3,8($s1) 
beq $t2,$s0,print 
j L1 

print: 
lw $t3,0($s1) 
li $v0, 1 # system call code for print_int 
move $a0, $t3 # integer to print 
syscall  # print it 
addi $s1,$s1,4 
beq $t2,$s0,Exit 
j print 


Exit: 
li $v0, 10  # exits program 
syscall 




# END OF PROGRAM 
+0

どのようなデバッグ作業をしましたか?問題はどこにあると思いますか? –

+1

あなたのコードもフォーマットしてください。 – blackcompe

+0

@MichaelPetrotta私はスタックを使用して結果を保存し、配列に並べ替えます。しかし、私のコードは実行されませんでした..最後に、ループ=> A [i] = A [i-1] * A [i -2] 私は配列からどのように単語とソートワード命令をロードするのが問題だと思います – Dalal

答えて

3

MARSのエラーメッセージ:行26で

エラー:で実行時例外0x00400030: ストアアドレスがワード境界に揃っていない0x1001002d

エラーメッセージは、あなたがこの命令に違法な(非ワードアライン)アドレスでメモリにアクセスしようとしていることを語っている:

sw $t0,0($s1) 

あなたはこのような問題を抱えているときに、あなたが必要デバッガを使用する。まず、例外がスローされた命令にブレークポイントを設定します。

brkpt

アクセスしようとしているプログラムを実行し、それがブレークポイントで停止したとき、($ s1の中に)アドレスを確認してください。 268501037または0x1001002dであることがわかります。また、7で終わるので、それは単語に整列していません。

regfile

$s1正しいアレイアドレスを持っていますが、私はあなたがそれがワード境界整列アドレスで開始すると、あなたはデータセグメントで配列を作成したときと仮定していると思います。これはそうではありません。これを解決するには、データを​​にする必要があります。

.data # Data declaration section 
str1: .ascii "Please enter the number of terms to produce: " 
    .align 2 
arr: .space 40 
関連する問題