2010-03-03 51 views
6

Estoy intentando crear una matriz en el conjunto MIPS y luego agregar todos los elementos. Sin embargo, cuando intento montar el siguiente, que diceCrear (y acceder) una matriz en MIPS

Error en la línea 1 read_array posición 7: ".word" directiva no puede aparecer en segmento de texto ensamblar: operación se ha completado con errores.

Aquí es mi montaje:

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: 

Gracias!

+0

Conozco algunos errores lógicos en este código, pero obtuve mi respuesta. ¡Gracias! – hodgesmr

+0

Eso es realmente extraño, IDK si esta limitación es intencional para proteger a los principiantes de mezclar datos con código y hacer que su programa se cuelgue cuando la ejecución recaiga en sus datos, o qué. En la mayoría de los ensambladores, puede usar '.byte' /' .word' o 'db' /' dd' en cualquier lugar para emitir los bytes que desee en cualquier posición. (por ejemplo, para emitir una codificación no predeterminada de una instrucción por algún motivo). –

Respuesta

7

usted tiene que poner esta línea:

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

En la sección .data. Compruebe esto quick tutorial.

3

El error indica que no puede poner datos (.word 3, 2) en el segmento del código. "Segmento de texto" es un término de estilo antiguo que significa "segmento de código" http://en.wikipedia.org/wiki/Code_segment

El ensamblador desea que declare un segmento de datos y coloque la matriz allí. Nunca he hecho el ensamblador Mips, pero espero que sea algo como esto

.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

Sería '.text' en lugar de' .code' en la mayoría de los ensambladores que he usado. –

+0

@Carl: probablemente tengas razón, especialmente dado el mensaje de error. Lo cambiaré. –