Копирование массивов в сборке MIPS32

У меня есть сегмент кода C++, который мне нужно преобразовать в mips с помощью прямого перевода. Я сделал большую часть этого, это цикл do while. Я просто не понимаю эту строчку в MIPS.

x[i] = y[i];

Я не понимаю, как преобразовать это в mips, и я бесконечно искал в Интернете. Могу ли я получить какую-либо помощь?

РЕДАКТИРОВАТЬ

Это то, что у меня было, но мне сказали, что это неправильно:

la $6, y
Li $7, $1
Add $7, $7, $7
Add $7, $7, $7
Add $8, $6, $7
Lw $6, 0($8)
La $7, x
Li $8, $1
Add $8, $8, $8
Add $8, $8, $8
Add $7, $7, $8
Sw $6, 0($7)

Я использовал этот онлайн-сайт в качестве ссылки:

http://www.cs.pitt.edu/~xujie/cs447/AccessingArray.htm

ВТОРОЕ РЕДАКТИРОВАНИЕ

Кодирование на С++

i=0;
do {
    x[i]=y[i];
    i++;
}
while (i!=j);

MIPS Прямой перевод

Addi $1, $1, 0
Loop:   la $6, y
    Li $7, $1
    Add $7, $7, $7
    Add $7, $7, $7
    Add $8, $6, $7
    Lw $6, 0($8)
    La $7, x
    Li $8, $1
    Add $8, $8, $8
    Add $8, $8, $8
    Add $7, $7, $8
    Sw $6, 0($7)
    Addi $1, $1, 1
    Bne $1, $2, loop 

И вот все мои регистры, которые я могу использовать, чтобы не запутать вас:

Variables   i   j   x   y   4 (constant)    Free
Registers   $1  $2   $3   $4    $5               $6, $7, $8

person Jacob Rhodes    schedule 03.11.2012    source источник
comment
Эта строка кода не сравнивает два элемента массивов. Это задание.   -  person sellibitze    schedule 03.11.2012
comment
Вы пытаетесь написать версию теста на равенство массивов для сборки MIPS? Если нет, то я не понял этого вопроса.   -  person sellibitze    schedule 03.11.2012
comment
Что мешает вам загрузить адреса первых элементов массива в регистры процессора, пройтись по всем элементам в цикле, увеличивая адреса, загрузить элементы в другие регистры процессора и затем сравнить их?   -  person sellibitze    schedule 03.11.2012
comment
Извините, вы, ребята, правы, что это не сравнение двух. Я продолжаю неправильно использовать этот термин. Я пытаюсь присвоить x[i] = y[i]. Мой профессор дал мне целый сегмент кода для преобразования в MIPS из С++, и я преобразовал остальную часть, кроме этой одной строки. И, чтобы показать себя, я не знаю, как обойти все элементы в цикле, увеличивая адреса.   -  person Jacob Rhodes    schedule 03.11.2012
comment
Вы делаете это, например, с помощью таких инструкций, как ADDIU, LW, LH, LB, BNEZ. Что конкретно вам не понятно?   -  person sellibitze    schedule 03.11.2012
comment
Команды LH и LB для начала.   -  person Jacob Rhodes    schedule 03.11.2012
comment
Что мешает вам прочитать документацию MIPS об этих инструкциях? Подсказка: LH = загрузить полслова, LB = загрузить байт   -  person sellibitze    schedule 03.11.2012
comment
Ваш подход к индексации кажется сложным. Кроме того, я не вижу петли. Почему бы просто не увеличить $6 и $7 на 4 в цикле?   -  person sellibitze    schedule 03.11.2012
comment
Попробуйте отладить свой код в симуляторе, таком как MARS или что-то в этом роде.   -  person sellibitze    schedule 03.11.2012


Ответы (1)


Это должно привести вас в правильном направлении. Поскольку это вопрос домашнего задания, я не собираюсь давать вам полное решение.

Краткий справочник (инструкции MIPS, соглашение о вызовах и т. д.):

http://www.mips.com/media/files/MD00565-2B-MIPS32-QRC-01.01.pdf

Пример ассемблерной функции, которая вычисляет скалярное произведение 32-битного и 16-битного вектора в среде с прямым порядком байтов:

http://code.google.com/p/mips32-asm/source/browse/dot32x16.S

Здесь вы можете увидеть, как осуществляется доступ к элементам массивов.

Обратите внимание, что ".set reorder" заставляет ассемблер переупорядочивать инструкции и/или включать NOP для работы с так называемым слотом задержки. В случае, если ваш профессор хочет увидеть, что вы поняли проблему слота задержки, вы должны правильно заказать инструкции и/или написать свой собственный NOP после ветвления/прыжка.

person sellibitze    schedule 03.11.2012
comment
Ваши ссылки очень помогают! Спасибо, что не дали мне ответ, потому что это не то, чего я хотел, и я прошу прощения за то, что так поздно с принятым ответом. - person Jacob Rhodes; 09.01.2013