繁体   English   中英

C指令的汇编语言实现

[英]Assembly Language implementation of C instruction

我正在尝试翻译A[2*i]=A[2*k+j]; 汇编语言。 int数组“ A”(四个字节)从地址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)

这个对吗?

这里需要两个步骤,第一步是从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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM