C指令的汇编语言实现

时间:2014-06-16 15:27:44

标签: assembly mips

我正在尝试将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)

这是对的吗?

1 个答案:

答案 0 :(得分:1)

此处需要执行两个步骤,首先从A[2*k+j]加载,然后在A[2*i]加载。

您已经计算了2*i2*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)