0

このコードが浮動小数点数の格納時に例外を発生させる理由。私は問題を理解することができません。コードは次のとおりです。

li $t1,0

Loop:

add $t0,$t1,$s0

li $v0,6
syscall
mov.s $f1,$f0

swc1 $f1,0($t0)

addi $t1,$t1,4

beq $t1,20,Mult

j Loop
4

1 に答える 1

0

おそらく unalignment exception execution が発生していますswc1 $f1,0($t0)。この命令swc1では、2 番目の引数が、ワード境界に位置合わせされた有効なメモリ アドレスである必要があります。これは、この有効なメモリ アドレス (この場合は に格納されているアドレス) の最下位 2 ビット$t0がゼロである必要があることを意味します。

$s0あなたが投稿したコードは、2つの最下位ビットのうち少なくとも1つが1である可能性が高い初期化を示していません。

コードを修正するに$s0は、これらのビットが 0 で始まることを確認して、で使用される実効メモリ アドレスswc1がワード アラインされるようにします。

の初期化$s0が完了した場合、データを格納するバッファを宣言するときにディレクティブla $s0, labelを使用することができます。たとえば、次のようになります。.align 2

label: .align 2
       .space ...
于 2012-11-21T12:54:50.953 に答える