在ARM中添加数组指针

时间:2018-10-09 08:28:54

标签: c assembly arm

假设我们有一个类型为X的数组r0,其基址在y中。而且我们在r1中有一个变量z,在r2中有一个变量add r1, r0, r1 ldr r2, [r1]

如果我们这样做:

ldr r2, [r1]

它将做什么?我知道这非常简单,但我不了解添加数组地址和某些常量的工作方式。另外,我不了解r2的语法。我知道它会加载到[r1]中,但是r2是什么?

是数组的所有元素吗?因此,r1现在也是r1副本的数组的基地址吗? y加入数组后是否成为数组?那么是否将原始z = g*(B[0] + B[1] + B[2] + B[3])添加到数组的每个元素中?我基本上是在问如何将其转换为C函数。现在我正在猜测.name3 { border: 1px solid black; height: 55px; width: 100px; float: left; } .name { border: 1px solid black; height: 10px; width: 99px; float: left; } .name1 { border: 1px solid black; height: 42px; width: 34px; float: left; } #name2 { border: 1px solid black; height: 20px; width: 30px; float: left; },但我不确定这是否有意义。

1 个答案:

答案 0 :(得分:0)

它是这样的:

add r1, r0, r1 /* r1 = r0 + r1 */
ldr r2, [r1]   /* r2 = value at address in r1 */

这两行是对数组访问x[index]的翻译。 为了计算x[index]的地址,生成了流水线add r1, r0, r1,其中r0x的基地址(x[0]的地址)和{ {1}}是r1(乘以4),因此index最终包含r1地址。然后,为了获取x[index],程序集从使用行x[index]计算的内存地址中加载它。