2012-02-14 11 views
0

アライメントエラーが発生する理由は何ですか?同様の行la $t0, mainBがうまく実行されても、la $t0, mainFを実行するとエラーが発生します。これはMIPSでの初めてのコーディングなので、いくつかの研究を行い、アドレスの整列の意味をあいまいにしていますが、コンパイラはこのランタイム例外を投げる前に4を追加する部分に到達しません。あなたは次の宣言持っワード境界(MIPS)にアドレスがフェッチされない

.data 

mainF: 
    .byte 1 
mainB: 
    .byte 1 

mainN: 
    (has '.word's, generic tests for the program itself) 

newline: 
    .asciiz "\n" 
textFw: 
    .asciiz "The integers in order:\n" 
textBw: 
    .asciiz "The integers in backwards order:\n"   

.text   

main: 
    # Function prologue 
    addiu $sp, $sp, -24  # allocate stack space -- default of 24 here 
    sw  $fp, 0($sp)   # save caller's frame pointer 
    sw  $ra, 4($sp)   # save return address 
    addiu $fp, $sp, 20   # setup main's frame pointer 

    # Put mainF into $s0 
    la  $t0, mainF 
    lw  $s0, 0($t0) 

    # Put mainB into $s1 
    la  $t0, mainB 
    lw  $s1, 0($t0) 

     ... 
+0

あなたの馬を持って、私はそれが行番号を表示していないことを認識していませんでした。私はそれを指摘した。より良い?それが私にそのエラーを投げかけている理由を説明することさえ助けになります。 (これは私がヘルプフォーラムを使用することを躊躇する理由です。誰も助けたいと思っていません) – Alyssa

+0

あなたの質問を書いて、簡単に答えることができる方法を示しました。 – Gabe

答えて

1

mainFはアドレス0が割り当てられますと仮定すると

mainF: 
    .byte 1 
mainB: 
    .byte 1 

を、mainBはアドレス1が割り当てられてしまいます。アドレス1は明らかにワードで整列されていないため(1は4の倍数ではない)、ロードしようとすると例外が発生します。

+1

MIPSのワード数は4サイズ(4の倍数)です。 – gusbro

+0

OHHHです。 derpy derp!ロード・バイトではなく、ロード・ワード。そうですね、たくさんの意味があります。ありがとう! – Alyssa

関連する問題