我正在尝试将A[2*i]=A[2*k+j];
翻译成汇编语言。阵列' A' ints(四个字节)从地址Astart
(32位)开始,i, j, k
存储在$s0, $s1, $s3
中。
因此,如果我正确理解问题,我需要将[2*k+j]
元素的地址和值设置为[2*i]
元素吗?我的困惑是修改地址。这就是我所拥有的:
add $t0, $s0, $s0 #2*i
add $t1, $s3, $s3 #2*k
add $t2, $t1, $s3 #2*k+j
sw $t2, Astart
sw $t0 4(Astart)
这是对的吗?
答案 0 :(得分:1)
此处需要执行两个步骤,首先从A[2*k+j]
加载,然后在A[2*i]
加载。
您已经计算了2*i
和2*k+j
,但是您忘记了乘以4(因为32位整数的每个元素的偏移量是4个字节)。
更正的代码可能如下所示:
add $t0, $s0, $s0 #2*i
add $t1, $s3, $s3 #2*k
add $t2, $t1, $s3 #2*k+j
sll $t1 $t1 2
sll $t2 $t2 2
la $t0 Astart
add $t3 $t0 $t1 #Address of A[2*k]
add $t4 $t0 $t2 #Address of A[2*k+j]
lw $t0 0($t3)
sw $t0 0($t4)