假设我们有一个类型为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;
}
,但我不确定这是否有意义。
答案 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
,其中r0
是x
的基地址(x[0]
的地址)和{ {1}}是r1
(乘以4),因此index
最终包含r1
地址。然后,为了获取x[index]
,程序集从使用行x[index]
计算的内存地址中加载它。