Может кто-нибудь объяснить следующий код MIPs? - PullRequest
0 голосов
/ 18 сентября 2018

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 Ответ

0 голосов
/ 18 сентября 2018

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

...