Может кто-нибудь объяснить следующий код MIPs?

f,g,h,i,j == $s0-$s4. Базовый адрес массивов A и B: $s6 и $s7.

sll $t0, $s0, 2
add $t0, $s6, $t0
sll $t1, $s1, 2
add $t1, $s7, $t1
lw $s0, 0($t0)

насколько я понимаю, первая строка принимает значение f*4 и сохраняет его в $t0. Мне сказали, что у нас есть первая строка, потому что массив содержит 4-байтовые значения. Пожалуйста, объясните остальное. Я знаю, что программа где-то обращается к массиву, но я не понимаю синтаксис, просто выглядит, как базовый случай массива A добавляется в f*4. Благодарю.

1 ответ

Решение

sll сдвиг влево-логично - так sll $t0, $s0, 2 принимает значение в $s0 (f), и сдвигает его влево на 2 битных места, придерживаясь результата $t0, Это то же самое, что умножение на 4, но намного быстрее.

add это дополнение - так add $t0, $s6, $t0 принимает значение в $s6 (базовый адрес A) и добавляет $t0 значение только что вычислено выше, придерживаясь результата в $t0 (заменяя старое значение). Это дает вам адрес A[F]

lw это слово загрузки - так lw $s0, 0($t0) загружает 4-байтовое значение со смещением 0 байт от $t0 и вставляет это $s0, Учитывая предыдущие две инструкции, это значение A[f]

Две другие инструкции вычисляют адрес B[g] в $t1

Другие вопросы по тегам