【发布时间】:2014-04-13 17:10:13
【问题描述】:
所以我有这段代码,其中 N 是两个数组的大小。
int i;
for (i = 0; i < N; i++)
{
if (listA[i] < listB[i])
{
listA[i] = listB[i];
}
}
我正在尝试将其实现为 ARM 汇编子例程,但我完全不知道如何处理数组。到目前为止我有这个:
sort1:
stmdb sp!, {v1-v5, lr}
ldmia sp!, {v1-v5, pc}
我假设我必须使用 cmp 来比较这些值,但我什至不确定要使用哪些寄存器。有人有什么指导吗?
编辑:
好的,我现在有了这个代码:
sort1:
stmdb sp!, {v1-v5, lr} @ Copy registers to stack
ldr v1, [a1], #0 @ Load a1
str v1, [a2], #0 @ Copy elements of a1 to a2
ldmia sp!, {v1-v5, pc} @ Copy stack back into registers
这会复制一个 10 元素数组的前四个元素,所以我假设如果我将“#0”更改为“#4”,它会导致接下来的四个元素发生变化,但事实并非如此。为什么?
【问题讨论】:
-
“我什至不确定要使用什么寄存器”阅读ARM procedure call standard documentation。
-
谢谢,帮了大忙。