例如,
$a0 is an index/pointer
$a1 is the address of the array base
我想在循环中访问数组的每个元素,对该元素执行算术运算,然后将其保存到下一个。每次迭代时,索引应增加 +1。
举一个简单的例子,我试图对数组中的每个前一个元素求平方。初始硬编码值为 INDEX[0]=0,ARRAY[0]=2。我已经标记了我感到困惑的地方。我不知道如何为每个循环制作这个变量。
.data
INDEX: .space 4
.align 2
ARRAY: .space 16
.align 2
.text
la $a0, INDEX
la $a1, ARRAY
li $t0, 0
sw $t0, ($a0) # set INDEX[0]=0
li $t0, 2
sw $t0, ($a1) # set ARRAY[0]=2
LOOP:
lw $t0, ($a0)
sll $t0, $t0, 2 # $a0 * 4 to get element offset
lw $t1, $t0($a1) # STUCK HERE (1)
add $t1, $t1, $t1 # square
lw $t0, ($a0)
add $t0, $t0, 1
sw $t1, $t0($a1) # AND HERE (2)
add $a0, $a0, 1
... keep looping if space remaining in $a1
(1) 如何保存元素 ARRAY[INDEX] 以注册 $t1 而无需硬编码偏移量?
(2) 如何将更改后的寄存器 $t1 保存到数组中的特定元素:ARRAY[INDEX] = $t1
由于间接寻址会在每个循环中发生变化,因此我想避免使用 4($a1)、8($a1) 等。
谢谢你。