【发布时间】:2017-12-20 15:50:47
【问题描述】:
A,B,C 是长度为 6 的数组,基地址在寄存器中找到如下:
A=[0 1 2 3 4 5], Base = $t0
B=[1 3 5 7 9 11] Base = $t1
C=[0 5 2 6 3 8] Base = $t2
现在是代码本身:
add $t4, $zero, $zero
Loop: add $t5, $t4, $t1
lw $t6, 0($t5)
add $t5, $t4, $t2
lw $t7, 0($t5)
or $t6, $t6, $t7
add $t5, $t4, $t0
sw $t6, 0($t5)
addi $t4, $t4, 4
slti $t5, $t4, 20
bne $t5, $zero, Loop
我的问题是:
1.) 当添加 $t4 和 $t1 时,我们是否在每个 B[i] 中添加零?
2.) 在 mips 中添加数组时,假设 add $t6, $t0,$t1 我们在做什么:
- A[i]+B[i] 为所有索引,然后 $t6 是一个新数组?
- 或者我们只是在做 A[0]+B[0]?
3.) 您究竟如何在数组上使用 OR?
【问题讨论】:
-
然后 $t6 是一个新数组?不可能是这样的。它只是一个 32 位的寄存器。内存中发生的情况取决于您存储它的位置(使用
sw $t6, 0($t5),其中$t5之前计算为指向您现有的数组之一)。 -
Assembly 不像高级语言,您可以使用一条指令处理整个数组。这就是为什么这段代码在循环中!