Может кто-нибудь сказать мне, если мой перевод MIPs на английский хорошо? - PullRequest
0 голосов
/ 20 сентября 2018
sll $t0, $s0, 2     #$t0 = f*4
add $t0, $s6, $t0   #$t0 = A[0+f]
sll $t1, $s1, 2     #$t1 = g*4
add $t1, $s7, $t1   #$t1 = B[0+g]
lw $s0, 0($t0)      #f = A[f], f becomes base array value of A + 0 
addi $t2, $t0, 4    #$t2 = A[f+4]
lw $t0, 0($t2)      #A[f] = A[f+4], (the stuff located at the base value of A[f+4+0] is stored in A[f])
add $t0, $t0, $s0   #A[F] = f(which == A[f])
sw $t0, 0($t1)      #B[g] = A[f]

я только изучаю MIPS, и я думаю, что материал, который я перечислил после комментариев '#', является правильным, но мой компилятор mips не работает над ним.нет, я не совсем уверен, что код должен делать.Я получил это в классе, и я просто пытаюсь перевести это, чтобы я мог знать, что происходит, так как задание состоит в том, чтобы упростить код до меньшего количества инструкций MIP.спасибо.

1 Ответ

0 голосов
/ 20 сентября 2018

При условии, что на входе у вас есть целочисленные значения f и g в $s0 и $s1 и указатели на массивы A и B в $s6 и $s7, и онимассивы 4-байтовых целых чисел, то это:

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)      # $s0 = A[f]
addi $t2, $t0, 4    # $t2 = &A[f+1]
lw $t0, 0($t2)      # $t0 = A[f+1]
add $t0, $t0, $s0   # $t0 = A[f+1] + A[f]
sw $t0, 0($t1)      # B[g] = A[f+1] + A[f]

, поэтому весь этот код сводится к одному назначению B[g] = A[f+1] + A[f]

...