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