2017-02-21 4 views
1

У меня есть код 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. Потому что, насколько я знаю, слово загрузки использует только статическое значение.

+0

можно увеличить s0, s1, s2 ... по размеру одного элемента массива каждого цикла. Или сделайте их копии и увеличьте их, чтобы не потерять исходный начальный адрес. Это работает для большинства наборов инструкций, включая этот. –

ответ

1

массивы расположены с наименьшим базовым адресом в памяти и индексируются к следующему элементу через смещение 4 байта [Изображение из Harris DM, Harris SL - Digital Design и компьютерной архитектуры, 2-е издание - 2012].

Harris D. M., Harris S. L. - Digital Design and Computer Architecture, 2nd Edition - 2012

for_loop: 
     bgt $t0, 100, for_loop_done  #i <100 
     addi $t0, $t0, 1    #i++ or i = i+1 


     lw $t4, 0($s0)    # load a in t4 
     lw $t1, 4($s1)    # load b in t1 
     lw $t2, 8($s2)    # load c in t2 
     add $t4, $t2, $t1   # add b with c and store in a 
     lw $t3, 12($s3)    # load d in t3 
     sub $t4, $t3, $t4   # sub contents of a from d 
     sw $t4, 0($s0)    # store contents of t4 into a 

     j for_loop     # go to start of loop 

for_loop_done: 
Смежные вопросы