2017-09-30 9 views
-1

MIPS 32では、単純なC関数(char配列で作成された単語が回文かどうかを示す)を変換しようとしていますが、non-multipleをロードするのに問題があります配列の-of-4位置。明らかMIPS32ワード配列

`li t0,0(a0)` 

負荷の最初の文字(CHAR)を、そして

`li t0,4(a0)` 

負荷アレイの第五の文字が(私はそれが二番目にあったであろうと思いました)。

`li t0,1(a0)` 

のように、セカンダリフォールトを取得しようとしています。したがって、0(a0)をロードする前にシフトを論理的に左シフトを使用します。これをどうすれば解決できますか?

答えて

0

ネヴァーマインドは、ここで私はそれが動作するようになった方法は次のとおりです。

addu a0,a0,t0 #t0 = i, a0 <- a0+i 
lb t2,0(a0) #store array[i] in t2 
subu a0,a0,t0 #returns a0 to original value 

私は2番目の文字を取得したい場合は、私は、例えば、T0に1をロードします。

0

これは32ビットプラットフォームであり、アライメントされたアクセスが必要です。したがって、a0が4バイトにアライメントされている場合、li t0,0(a0)は、最初の32ビット値a0t0にロードします。しかし、li t0,1(a0)は、整列していない32ビット値をロードしようとします(失敗する)。

一度に1文字ずつ読み込まないようにしてください。 MIPS 32が一度に4文字(32ビット)を読み込むという事実を受け入れます。 shiftとbitwise-andを使用して、単語内の1文字にアクセスできます。

+0

お返事ありがとうございます。単語の中の2番目の文字をどのように取得するかの例を教えてください。 – martincito

関連する問題