2013-09-17 2 views
1

Итак, я пытаюсь перевести этот код сборки MIPS на C. Я смущен некоторой частью того, что происходит. Вот код сборки MIPS: предположим, что мы имеем переменные f, g, h, i, j, хранящиеся в $ s0, $ s1, $ s2, $ s3 и $ s4 соответственно. Предположим, что базовые адреса массивов A и B находятся в $ s6 и $ s7 соответственно, и они содержат 4 байтовых слова. Я добавил комментарии, чтобы показать, что я понимаю большую часть этого.MIPS Assembly to C

sll $t0, $s0, 2 # $t0 = f * 4 
add $t0, $s6, $t0 # $t0 = &A[f] 
sll $t1, $s1, 2 # $t1 = g * 4 
add $t1, $s7, $t1 # $t1 = &B[g] 
lw $s0, 0($t0) # f = A[f] 
addi $t2, $t0, 4 <-- Here's where I am confused. Since $t0 contains the address of A[f], what does adding 4 do to that? 

lw $t0, 0($t2)  
add $t0, $t0, $s0 
sw $t0, 0($t1) 

ответ

3

Это похоже на вычисление указателя на следующий элемент массива A, на одну строку позже вы загружаете данные с этого адреса. Предполагая, что в C:

Word4Byte A[],B[]; 
B[g] = A[f] + A[f+1];