我有以下ARM汇编代码:
mov r0, SP
mov r1, LR
bl func
有没有办法用C代码调用函数func?像func(SP, LR)
谢谢!
答案 0 :(得分:2)
取决于您想要做什么以及您使用的编译器。
使用gcc
这样的东西可以起作用:
extern void func(void*, void*);
void foo()
{
int dummy[4];
func(&dummy, __builtin_return_address(0));
}
但是,这可能并不总能为您提供精确的堆栈指针。根据{{3}},它生成以下汇编代码:
foo():
push {lr}
sub sp, sp, #20
mov r1, lr
mov r0, sp
bl func(void*, void*)
add sp, sp, #20
ldr pc, [sp], #4
答案 1 :(得分:0)
使用输出寄存器将LR
和SP
放入变量中:
void *lr, *sp;
asm ("mov %0, sp" : "=r" (sp));
asm ("mov %0, lr" : "=r" (lr));
func(lr, sp);