2015-09-26 78 views
0

有人可以帮助我了解MIP代码中的某些行正在做什么吗?在MIP中使用数组

C代码是B[8] = A[i - j]其中i = $ S3,J = $ s4中,& A [] = $ S6和& B [] = $ S7

MIPS的代码如下...

sub $t0, $s3, $s4 # i - j 
sll $t0, $t0, 2 #Gets the offset of 8 for B[] 
add $t0, $s6, $t0 #Goes to the offset in B[] ? 
lw $t1, 0($t0) #???? 
sw $t1, 32($s7) #???? 

一旦到达最后3行,我会有点失落。

它为什么是0($ t0)和32($ s7)?或者为什么0和32?

+0

什么是“MIPs”?这是28位版本的MIPS吗? – Olaf

回答

1
sll $t0, $t0, 2 // This multiplies (i-j) * 4, not 8. Because the indexes are 4-byte ints 
add $t0, $s6, $t0 // $t0 = A + (i-j)*4. So $t0 = &A[i-j] 
lw $t1, 0($t0)  // $t1 = A[i-j] 
sw $t1, 32($s7) // B[32/4] = $t1 

32($ S7)指$ S7 + 32添加32因为要访问一个整数阵列,它位于在存储器地址B + 8 *的sizeof(int)的的第8个元素的原因= B + 32