Creating (and accessing) an array in MIPS
I'm trying to create an array in MIPS Assembly, and then add all the elements together. Ho开发者_StackOverflowwever, when I try to assemble the following, it says
Error in read_array line 1 position 7: ".word" directive cannot appear in text segment Assemble: operation completed with errors.
Here's my assembly:
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:
Thanks!
You have to put this line:
list: .word 3, 2, 1, 0, 1, 2
Into the .data
section. Check this quick tutorial.
The error is telling you you can't put data (.word 3, 2) in the code segment. "Text segment" is an old style term meaning "code segment" http://en.wikipedia.org/wiki/Code_segment
The assembler wants you to declare a data segment and put the array there. I've never done Mips assembler, but I would expect it to be something like this
.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
精彩评论