Создание (и доступ к) массива в MIPS - PullRequest
6 голосов
/ 03 марта 2010

Я пытаюсь создать массив в MIPS Assembly, а затем добавить все элементы вместе. Тем не менее, когда я пытаюсь собрать следующее, он говорит

Ошибка в строке 1 read_array, позиция 7: директива .word не может появляться в текстовом сегменте Сборка: операция завершена с ошибками.

Вот моя сборка:

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:

Спасибо!

Ответы [ 2 ]

9 голосов
/ 03 марта 2010

Вы должны поставить эту строку:

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

В раздел .data. Проверьте это краткое руководство .

3 голосов
/ 03 марта 2010

Ошибка говорит о том, что вы не можете поместить данные (.word 3, 2) в сегмент кода.«Текстовый сегмент» - это термин старого стиля, означающий «сегмент кода» http://en.wikipedia.org/wiki/Code_segment

Ассемблер хочет, чтобы вы объявили сегмент данных и поместили туда массив.Я никогда не делал Mips на ассемблере, но я ожидал, что это будет что-то вроде этого

.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
...