내 MIPS 코드에 문제가 있습니다 ... 비교할 문자없이 키보드로 전달 된 문자열의 발생을 확인합니다. 스택에 문자열 (스택 -255 위치)과 .data 섹션에 배열을 저장하여 발생을 저장합니다. 기본 개념은 스택에서 문자 하나 하나를 루프 (lb $ t1, ($ a0) t1 = 문자의 아스키 코드 - a0 = 함수에서 전달 된 스택)로로드하고, 읽은 문자를 뺍니다 97 (97 = a)를 스택에서 가져 와서 배열의 인덱스를 얻고 다른 루프를 사용하여 발생 횟수를 계산하고 이전에 계산 된 인덱스로 저장하십시오. 당연히 어레이에는 104 개의 위치가 있습니다 (26 개의 문자 * 4는 발생 횟수를 저장하기 때문에). 문제는 내 배열 위치의 인덱스를 찾을 때 sw $ -, myArray ($ -) Mars를 사용하여 발생 위치를 저장한다는 것입니다.Runtime exception at 0x0040007c : 저장소 주소가 정렬되지 않았습니다. 단어 경계에 0x10010087 .. 데이터 섹션에서 .align을 추가하려고했지만 솔루션을 찾지 못했을 수 있습니다. 메모리에 단어를 액세스하려면, 주소가 워드로 정렬 (4의 배수)해야합니다왜 "저장 주소가 단어 경계에 정렬되지 않았습니다"
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
대단히 감사합니다. Michael !!! 이제 배열 내에서 내 발생을 저장할 수 있습니다. 감사합니다 감사합니다! – Marco