Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating (and accessing) an array in MIPS

I'm trying to create an array in MIPS Assembly, and then add all the elements together. However, 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!

like image 539
hodgesmr Avatar asked Mar 03 '10 03:03

hodgesmr


People also ask

How do you pass an array to a function in MIPS?

To pass an array to a subroutine, you have two choices: Push a complete copy of the array onto the stack (pass-by-value, usually not the right answer), or push the array's base address onto the stack and then address relative to that (pass-by-reference).


2 Answers

You have to put this line:

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

Into the .data section. Check this quick tutorial.

like image 91
Carl Norum Avatar answered Oct 05 '22 18:10

Carl Norum


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
like image 20
John Knoeller Avatar answered Oct 05 '22 17:10

John Knoeller