ユーザーから配列に読み込む整数を格納しようとしていますが、配列に格納しようとするとデータがアライメントされません。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にそれを変更しました。しかしそれはまだ整列していませんでした。
ありがとうございます。これはプロジェクトであり、このようなものを手伝ってくれる人がいないことを知っています。しかし、私は宿題をやっており、どこでも答えを見つけることはできません。
私はそれを理解しました。明らかに、2つのスペースの割り当ては、互いに直面する必要がありました。それ以外の場合は、データの整列が解除されます。私はこれが正確にここで起こっているかどうかは分かりませんが、私の問題は解決しました。もしこれがすべてのMIPSプログラムに当てはまるのであれば誰にも分かりませんか? – Man
board_repをサイズに持ってきたか、またはboard_repまでサイズを持ってきましたか? – Musa