1
寄存器作为参数的函数,我有以下的ARM汇编代码:ARM汇编调用带有用C
mov r0, SP
mov r1, LR
bl func
是否有使用调用C代码的函数func的一种方式?像func(SP, LR)
谢谢!
寄存器作为参数的函数,我有以下的ARM汇编代码:ARM汇编调用带有用C
mov r0, SP
mov r1, LR
bl func
是否有使用调用C代码的函数func的一种方式?像func(SP, LR)
谢谢!
取决于你想要做什么和你使用的编译器。 随着gcc
这样的事情可以工作:
extern void func(void*, void*);
void foo()
{
int dummy[4];
func(&dummy, __builtin_return_address(0));
}
这可能并不总是给你确切的堆栈指针,虽然。按照godbolt它产生以下组件的代码:
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
使用输出寄存器放置LR
和SP
在变量:
void *lr, *sp;
asm ("mov %0, sp" : "=r" (sp));
asm ("mov %0, lr" : "=r" (lr));
func(lr, sp);
不确定;使用C.如果你想使用C语法,如果在编写汇编代码时没有真正看到这一点。我想你可以编写一个类似于你在MASM中获得的invoke宏的宏,然后你可以编写诸如'invoke func,sp,lr' – Michael