У меня есть код C, с которым мне нужна помощь в MIPS. Код C выглядит следующим образом.Преобразование C в MIPS. Смещение слова нагрузки массива?
for (i=0; i<100; i++){
a[i] = b[i] + c[i] - d[i];
}
Я преобразовал это в MIPS, но не знаю, что положить в смещение слова нагрузки.
addi $t0, $zero, 0 #i = 0
for_loop:
bgt $t0, 100, for_loop_done #i <100
addi $t0, $t0, 1 #i++ or i = i+1
lw $t4, __($s0) # load a in t4
lw $t1, __($s1) # load b in t1
lw $t2, __($s2) # load c in t2
add $t4, $t2, $t1 # add b with c and store in a
lw $t3, __($s3) # load d in t3
sub $t4, $t3, $t4 # sub contents of a from d
sw $t4, __($s0) # store contents of t4 into a
j for_loop # go to start of loop
for_loop_done:
Будем считать, что а, б, в, г в s0, s1, s2, s3, s4 соответственно. Теперь, что нужно коду, мы можем компенсировать слово загрузки и хранить слово с постоянно меняющимся «i» из кода c. Потому что, насколько я знаю, слово загрузки использует только статическое значение.
можно увеличить s0, s1, s2 ... по размеру одного элемента массива каждого цикла. Или сделайте их копии и увеличьте их, чтобы не потерять исходный начальный адрес. Это работает для большинства наборов инструкций, включая этот. –