这是一个多步骤的过程。第一部分是将参数传递给比较并调用它。比较完成后,它将返回一个值。您将存储在 A[i] 中的正是这个返回值。
你可以把它想象成:
int temp = compare(num,i);
A[i] = temp;
其中 temp 只不过是 $v0 (返回值)。
A[i] 的内存位置是 A 的地址 + i * A 的元素的大小。对于这个答案,由于您没有真正指定 A 的类型,我假设它是一个 int 数组。此外,我还假设您的 MIPS 机器上的 int 是 4 字节(或一个字)。
考虑到这一点,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