これは多段階のプロセスです。最初の部分は、比較する引数を渡して呼び出すことです。比較が完了すると、値が返されます。A[i] に格納するのはこの戻り値です。
次のように考えることができます。
int temp = compare(num,i);
A[i] = temp;
temp は $v0 (戻り値) にすぎません。
A[i] が A のアドレス + i * A の要素のサイズであるメモリ位置。この回答では、A の型を実際に指定していないため、int 配列であると仮定します。さらに、MIPS マシンでは int が 4 バイト (または 1 ワード) であると想定しています。
これを念頭に置いて、A[0] は A + 0 のアドレスです。A[1] は A + 4 のアドレスです。A[2] は A + 8 のアドレスです。
大まかな概要は次のとおりです。
set_array:
# save $ra to stack
la $s1, A # assuming $s1 isn't used for anything
# loop code starts here
# A[i] = compare(num,i);
move $a0, $a0 # num (Here for completeness, it does nothing)
move $a1, $s0 # I am just assuming variable 'i' is in $s0
jal compare # call compare
sw $v0, 0($s1) # store the return value in A+4*i
addiu $s1, $s1, 4 # inc it by 4, for the next element
# i = i + 1
# jump back up
# restore $ra
jr $ra
# ...
compare:
# code to compare and
# return 1 or 0 in $v0
jr $ra