Write the C equivalent “train” function #void train(int*A, int*B, int*C, int k) train: add $t4, $0, $0 bus: add $t5, $t4, $a1 lw $t6, 0($t5) add $t5, $t4, $a2 lw $t7, 0($t5) add $t6, $t6, $t7 add $t5, $t4, $a0 sw $t6, 0($t5) addi $t4, $t4, 4 slt $t5, $t4, a3
Write the C equivalent “train” function
#void train(int*A, int*B, int*C, int k)
train:
add $t4, $0, $0
bus:
add $t5, $t4, $a1
lw $t6, 0($t5)
add $t5, $t4, $a2
lw $t7, 0($t5)
add $t6, $t6, $t7
add $t5, $t4, $a0
sw $t6, 0($t5)
addi $t4, $t4, 4
slt $t5, $t4, a3
bne $t5, $0, bus
jr ra
I have decoded the MIPS code and written all 11 instructions with a meaning along with the MIPS code.
train:
add $t4, $0, $0 # i is initialized to 0, $t4 = 0
add $t5, $t4, $a1 # temp reg $t5 = address of b[i]
lw $t6, 0($t5) # temp reg $t6 = b[i]
add $t5, $t4, $a2 # temp reg $t5 = address of c[i]
lw $t7, 0($t5) # temp reg $t7 = c[i]
add $t6, $t6, $t7 # temp reg $t6 = b[i] + c[i]
add $t5, $t4, $a0 # temp reg $t5 = address of a[i]
sw $t6, 0($t5) # a[i] = b[i] + c[i]
addi $t4, $t4, 4 # i = i + 1
slt $t5, $t4, a3 # $t5 = 1 if $t4 < 256, i.e. i < 64
bne $t5, $0, bus # go to Loop if $t4 < 256
jr ra (means on function entry, ra holds the return address where our caller wants us to jump when we're done)
Step by step
Solved in 2 steps