1

我正在尝试将四个以上的参数从我的 C++ 代码传递给程序集。

C++ 函数如下所示:

static float armFunction(float, float, float, float, float);

我可以毫无问题地从寄存器 r0-r3 中检索前四个参数。

我希望我的第五个浮点参数在堆栈上,我应该能够使用堆栈指针 sp 访问它,例如我尝试在 r4 中加载我的第五个参数,例如:

ldr r4, [sp]

甚至:

ldr r4, [sp, #-0x4]

但这不起作用,并且汇编代码立即退出,并带有一些堆栈损坏输出。

我的完整汇编代码如下所示:http: //pastie.org/3933875

4

2 回答 2

0

我的 asm 代码从 C 到 asm 的 JNI 调用中读取第 5 个参数没有问题。这是我的 asm 函数的前 2 行:

  stmfd    sp!,{r4-r12,lr}
  ldr      r12,[sp,#40]   @ first stack variable

在不需要保留任何寄存器的情况下,第 5 个参数位于堆栈顶部:

  ldr r12,[sp]
于 2012-05-19T13:58:23.873 回答
0

The problem with your code is that is modifies r4 without restoring it. The parameter is on the top of the stack.

于 2012-05-19T15:27:23.203 回答