Может кто-нибудь объяснить следующий код 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