2012-04-29 22 views
1

ユーザーから配列に読み込む整数を格納しようとしていますが、配列に格納しようとするとデータがアライメントされません。MIPSアセンブラのメモリアライメントの問題(詳細コード含む)

この最初のコードブロックは、すべてのデータを初期化する場所です。それは(右の2の後にSW)非整列となっところで右ここに

'#Constants 
P_INT  = 1  #Syscall to print integer(value) 
P_STRING  = 4  #Syscall to print a string(addr) 
P_CHAR  = 11  #Syscall to print a char(char) 
R_INT  = 5  #Syscall to read a integer(none) 
EXIT   = 10  #Exit program(none) 

'#Data 
     .data 
newline: 
     .asciiz "\n"   

'#Space for the bored. 

1. 
board_rep: 
     .space  578 

'#The current node to be read in 
cur_node: 
     .word  0 

'#Size of the bored 
size: 
     .space  4 
'#Plus sign 
plus: 
     .asciiz "+" 
'#dash 
dash: 
     .asciiz "-" 

(iは整数を保存しようとしていますどこ1.下にある)があります。奇妙なことは、後で(3番目のコードブロックで)まったく同じことをしていることです。ただし、サイズ配列に格納しています。ストア・ワード(3.)において

'#Grabs user input for the bored and stores it 
get_board_rep: 


     li  $v0,R_INT  '#Read next node and store it  
     syscall 
2. 
     sw  $v0,0($s1) 

     addi  $s1,$s1,4 ' #Increment next node addr 

     lw  $a0,0($s1) 
     j  prnt_node 

は整数微細にリードを格納します。

 la  $s0, size  ' #Store the variable addr's 
     la  $s1, board_rep 

     li  $v0,R_INT  ' #Get user input(size of bored) 
     syscall 
3. 
     sw  $v0,0($s0)  ' #Store the size of bored 


     jal  get_board_rep  

(働いていた他の配列と同じサイズ)を、私は多分、配列が大きすぎると思いましたが、私は4にそれを変更しました。しかしそれはまだ整列していませんでした。

ありがとうございます。これはプロジェクトであり、このようなものを手伝ってくれる人がいないことを知っています。しかし、私は宿題をやっており、どこでも答えを見つけることはできません。

+0

私はそれを理解しました。明らかに、2つのスペースの割り当ては、互いに直面する必要がありました。それ以外の場合は、データの整列が解除されます。私はこれが正確にここで起こっているかどうかは分かりませんが、私の問題は解決しました。もしこれがすべてのMIPSプログラムに当てはまるのであれば誰にも分かりませんか? – Man

+0

board_repをサイズに持ってきたか、またはboard_repまでサイズを持ってきましたか? – Musa

答えて

1

それは私には見えません。私が間違っていると、明示的にそれを整列させてみてください。

+0

コードで.align 2を実行しましたが、これらのスニペットには表示されません。 – Man

+0

アラインメントの問題がある場合は、アラインメントコードを送信することが重要です – Musa

関連する問題