2017-01-31 2 views
0

Ich habe ein Problem mit meinem MIPS-Code ... Ich würde die Vorkommen in einer Zeichenfolge von der Tastatur ohne ein Zeichen zum Vergleich übergeben. Ich habe die Zeichenfolge im Stapel (Stapel -255 Position) und ein Array im .data-Abschnitt, um die Vorkommen zu speichern. Die Grundidee ist, dass ich einen Brief vom Stapel eins nach dem anderen mit einer Schleife (lb $ t1, ($ a0) t1 = ASCII-Code des Buchstabens - a0 = Stapel an der Funktion übergeben), subtrahiere die gelesenen Buchstaben aus dem Stapel mit 97 (97 = a) und erhalten Sie den Index des Arrays und mit einer anderen Schleife, zählen Sie die Vorkommen und speichern Sie diese unter dem zuvor berechneten Index. Offensichtlich hat das Array 104 Positionen (26 Buchstaben * 4, weil ich die Anzahl der Vorkommen speichern würde). Das Problem ist, dass, wenn ich den Index meiner Array-Position finde und ich innerhalb der Position speichern würde die Vorkommen mit sw $ -, myArray ($ -) Mars diesen Fehler geben: Runtime Ausnahme bei 0x0040007c: Geschäftsadresse nicht ausgerichtet auf Wortgrenze 0x10010087 Ich habe versucht, .align in der .data Abschnitt hinzuzufügen, aber ich habe keine Lösung gefunden, vielleicht habe ich ein paar Dinge falsch ... Irgendwelche Hilfe?Warum habe ich den Fehler "Adresse nicht auf Wortgrenze ausgerichtet"

Dies ist mein Code:

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 

Antwort

0

Wenn Sie ein Wort im Speicher zugreifen wollen, muss die Adresse Wort ausgerichtet (ein Vielfaches von 4) sein.

Angenommen, dass $t4 ein Vielfaches von 4 enthält, was es zu tun scheint, bedeutet dies, dass myArray nicht wortorientiert ist. Um dies zu beheben, fügen Sie .align 2 in der Zeile vor myArray in Ihrem Datenabschnitt hinzu.

+0

Vielen Dank Michael !!! Jetzt kann ich meine Vorkommen im Array speichern. Danke, danke! – Marco

Verwandte Themen