MIPS - Как сохранить в памяти первые 256 чисел

Мне нужно написать программу на ассемблере, которая должна хранить в памяти первые 256 целых чисел от 0 до 255.

Вот код, который я написал (я новичок в ассемблере):

.data

memory: .space 256


.text

       li $t0, 0
       la $s0, memory
       sb $s0, 0($t0)

loop: 
       add $t0, $t0, 1
       sb $s0, 0($t0)
       j loop

Я пытался запустить программу с помощью SPIM, но не работает: SPIM говорит, что в инструкции sb $s0, 0($t0) есть ошибка.

Кто-нибудь может помочь мне с этим?


person Riccardo    schedule 16.02.2015    source источник


Ответы (1)


У вас нет никакого кода, чтобы выйти из вашего цикла, поэтому вы просто будете продолжать писать байты вечно, что в конечном итоге приведет к исключению Bad Address.

Вам нужно добавить несколько инструкций в цикл, которые проверяют, записано ли 256 байт, и если да, то не возвращаются к loop:.

Другая проблема заключается в том, что вы написали операнды для sb в неправильном порядке. Вы хотите сохранить $t0 в $s0, так что это должно быть sb $t0,0($s0). И вам также нужно увеличивать $s0 каждый раз, когда вы увеличиваете $t0.

(Кроме того, вы должны завершить свою программу, вызвав системный вызов 10).

person Michael    schedule 16.02.2015
comment
В loop я заменил j loop на bne $t0, 256, loop и добавил эту строку li $v0, 10 syscall, но у меня та же ошибка, что и раньше - person Riccardo; 16.02.2015
comment
Спасибо большое. Теперь вроде работает правильно. - person Riccardo; 16.02.2015