Mips x32 с использованием массива

я пишу этот код для одного из моих заданий, и мне нужно иметь массив размером 128, который я делаю

drops: .space 128

чтобы я мог загружать это конкретное место каплями и хранить в нем число 0-8.....

например... скажем, случайное число было 32, и я был на первой итерации цикла, он сохранил бы 0 в 32-м месте массива, если бы я был во 2-й итерации массива... он сохранил бы 1 в случайном числе, например, 92..spot

вот мой код:

Сначала я сделал все в своем массиве -1, чтобы проверить, есть ли в нем что-то...

storeArray: 

 la $t6, drops
 la $t1, 0  #counter


loopStoreRandom:

    move $a0, $s5   # send x 
    jal getDrop
    move $t2, $v0 #t2 has a random number 

    add $t6, $t6, $t2  #random + the whole   ---wrong

    lb $t3, ($t6)       
    bne $t3, -1, loopStoreRandom


    addi $t1, $t1, 1
    beq $t1, 128, exit
    j loopStoreRandom

так что, как вы видите, я хотел бы, чтобы было что-то, что я мог бы просто быть как sb $t1, $t2($t6), но я не могу


person user659745    schedule 23.03.2011    source источник
comment
Почему это не работает? Ошибка сборки? Запрет на использование инструкции? Какие?   -  person wallyk    schedule 23.03.2011
comment
idk это просто не работает ... всякий раз, когда я проверяю это ... когда я иду к выходу la $ t6, сбрасывает lb $ t5, 32 ($ t6) move $ a0, $ t5 li $ v0, 1 системный вызов li $ v0, 10 системный вызов, и он выведет -1 .... он должен распечатать число 0 -8   -  person user659745    schedule 23.03.2011
comment
мне жаль, что на самом деле он даже не возвращает никакого числа   -  person user659745    schedule 23.03.2011


Ответы (2)


Вы не восстанавливаете $t6 в каждом цикле, поэтому указатель отключается после первого цикла.

Переехать

la $t6, drops

внутри петли.

person Jens Björnhager    schedule 23.03.2011
comment
Я сделал это ... и он все еще возвращается как -1, хотя это должно быть число от 0 до 8. - person user659745; 23.03.2011
comment
Ну, я не вижу, что вы что-то сохраняете в массив, поэтому, конечно, он вернет -1, если вы ранее инициализировали все записи для этого. - person Jens Björnhager; 23.03.2011

jal getDrop
move $t2, $v0 #t2 has a random number 

Предполагая, что v0 возвращается из getDrop, инструкция перемещения будет выполнена ДО того, как будет выполнена getDrop, поскольку она будет выполняться как часть слота задержки jal. Таким образом, T2 не будет содержать возвращаемое значение getDrop.

должно быть:

jal getDrop
nop

move $t2, $v0
person PaulHK    schedule 11.09.2015
comment
Это зависит от среды выполнения. SPIM по умолчанию не имитирует слоты задержки перехода. То же самое, вероятно, относится и к MARS. - person Michael; 11.09.2015
comment
Я начал подозревать это, увидев множество других примеров MIP, делающих то же самое. - person PaulHK; 11.09.2015