2010-03-03 18 views
6

Ich versuche, ein Array in MIPS-Assembly zu erstellen, und fügen Sie dann alle Elemente zusammen. Aber wenn ich versuche, die folgenden zu montieren, heißt esErstellen (und Zugriff) eines Arrays in MIPS

Fehler in read_array Zeile 1, Position 7: „.WORD“ Richtlinie nicht in Textsegment auftreten können zusammenbauen: Betrieb mit Fehlern abgeschlossen.

Hier ist meine Montage:

list: .word 3, 2, 1, 0, 1, 2 
li $t0, 0x00000000 #initialize a loop counter to $t0 
li $t4, 0x00000005 #last index of array 
li $t3, 0x00000000 #this will hold our final sum 
la $t1, list #the address of list[0] is in $t1 

loop: addi $t0, $t0, 0x00000001 #index++ 
    add $t5, $t0, $t0 #array index X2 
    add $t5, $t0, $t0 #array index X2 again 
    add $t6, $t5, $t1 #4x array index in $t6 

    lw $t2, 0($t6) #load list[index] into $t2 
    add $t3, $t3, $t2 #$t3 = $t3 + $t2 
    beq $t0, $t4, end 
    j loop 

end: 

Dank!

+0

Ich bin bewusst, einige logische Fehler in diesem Code, aber ich habe meine Frage beantwortet. Vielen Dank! – hodgesmr

+0

Das ist wirklich komisch, IDK, wenn diese Einschränkung beabsichtigt, Anfänger davor zu schützen, Daten mit Code zu mischen und ihr Programm zum Absturz zu bringen, wenn die Ausführung in ihre Daten fällt oder was? In den meisten Assembler können Sie '.byte' /' .word' oder 'db' /' dd' irgendwo verwenden, um beliebige Bytes an jeder Position zu senden. (z. B. um aus einem bestimmten Grund eine nicht standardmäßige Codierung eines Befehls auszugeben.) –

Antwort

7

Sie haben dieses Spiel zu setzen:

list: .word 3, 2, 1, 0, 1, 2 

In dem .data Abschnitt. Überprüfen Sie diese quick tutorial.

3

Der Fehler besagt, dass Sie keine Daten (.word 3, 2) in das Codesegment einfügen können. "Textsegment" ist ein Begriff im alten Stil, der "Codesegment" bedeutet. http://en.wikipedia.org/wiki/Code_segment

Der Assembler möchte, dass Sie ein Datensegment deklarieren und das Array dort ablegen. Ich habe Mips Assembler nie gemacht, aber ich würde erwarten, dass es so etwas ist

.data 
list: .word 3, 2, 1, 0, 1, 2 

.text 
start: 
li $t0, 0x00000000 #initialize a loop counter to $t0 
li $t4, 0x00000005 #last index of array 
li $t3, 0x00000000 #this will hold our final sum 
la $t1, list #the address o 
+0

In den meisten Assembler, die ich verwendet habe, wäre es ".text" anstatt ".code". –

+0

@Carl: Sie haben wahrscheinlich Recht, vor allem angesichts der Fehlermeldung. Ich werde es ändern. –

Verwandte Themen