私のMIPSコードに問題があります...キーボードで渡された文字列の出現を比較文字でチェックします。私はスタック内の文字列(スタック-255の位置)と.dataセクション内の配列を使用して、そのオカレンスを格納します。基本的な考え方は、スタックから文字を1つ1つループ(lb $ t1、($ a0)t1 =文字のASCIIコード - a0 =関数で渡されたスタック)にロードし、読み込まれた文字を減算する97(97 = a)をスタックから取り出し、配列のインデックスを取得し、別のループを使用して、出現回数をカウントし、これを前に計算したインデックスの下に保存します。明らかに、配列には104個の位置があります(26個の文字* 4は出現回数を節約するためです)。問題は、私が配列の位置のインデックスを見つけたときに、sw $ - 、myArray($ - )Marsで発生した位置を保存すると ランタイム例外が0x0040007c:ストアアドレスが整列していない単語境界0x10010087 .dataセクションに.alignを追加しようとしましたが、解決策を見つけられませんでした。エラー "ストアアドレスがワード境界に揃えられていません"
これは私のコードです:
analizza_stringa: (function)
while_string:
# load a byte from the stack
lb $t0, ($a0)
#check end string
beq $t0, $zero, end
#check a line feed
beq $t0, 10, end
#array index
subi $t3, $t0, 97
#Multiply by 4 (I would save number)
mul $t4, $t3, 4
while_occorrenza:
#like before
beq $t1, 10, continue
#load a letter like before
lb $t1,($a0)
#Check the occurrences
bne $t1, $t0, continue2
#add 1 at the occurrences
addi $t5, $t5, 1
continue2:
#add 1 for the pointer at the string
addi $a0, $a0, 1
#Repeat
j while_occorrenza
continue:
#Save the number under the index calculated before
sw $t5, myArray($t4)
#counter=0 for another loop
li $t3, 0
#next character
addi $a0, $a0, 1
# repeat the first loop
j while_string
end:
jr $ra
マイケルありがとうございます!今度は、配列内に私の発生を保存することができます。ありがとう、ありがとう! – Marco