Предположим, что переменные f и g присвоены регистрам $ s0, $ s1.Предположим, что базовые адреса массивов A и B находятся в регистрах $ s6 и $ s7 соответственно.Ниже приведен код MIPS, который я написал для перевода A [2 * (f + g)] = B [B [16 + f / 2]]:
# accessing the correct address for A[2*(f+g)]
line 1. add $t0, $s0, $s1 # $t0 = f + g
line 2. add $s6, $s6, $t0 # A[0] should update to A[(f+g)/4]
line 3. sll $s6, $s6, 3 # A[(f+g)/4] should update to A[(8*((f+g)/4)]
line 4. srl $s0, $s0, 1 # f = f/2
line 5. addi $s0, $s0, 16 # f = f/2 + 16
line 6. sll $s0, $s0, 2 # f = (f/2 + 16) * 4
line 7. add $s7, $s0, $s7 # B[0] should update to B[f/2 + 16]
line 8. sll $s7, $s7, 2 # B[f/2 + 16] should update to (B[f/2 + 16]) * 4
line 9. add $t0, $s7, $0 # $t0 = (B[f/2 + 16]) * 4
line 10. sw $s6, $t0($s7) # should be storing B[(B[f/2 + 16]) * 4] in A[2*(f+g)]
Я думаю, что я все испортилдоступ к ячейке памяти внутри массива B, когда вам нужно получить к нему доступ дважды.Может кто-нибудь помочь?