2016-05-16 6 views
1

を使用してパラメータとしてのレジスタを持つ関数を呼び出すI持って、次のARMアセンブリコード:ARMアセンブリC

mov r0, SP 
mov r1, LR 
bl func 

Cコードを使用して関数funcを呼び出す方法はありますか?何かのようにfunc(SP, LR)

ありがとう!

+0

確かに。あなたはCの構文を使用する場合は、実際にアセンブリコードを記述する際にポイントを参照してくださいしないでください。私はあなたが 'invoke func、sp、lr'のようなものを書くことを可能にするMASMの' invoke'マクロに似たマクロを書くことができると思います – Michael

答えて

2

正確に何をしたいか、どのコンパイラを使用するかによって異なります。このような何かが、仕事ができるgccで :

extern void func(void*, void*); 
void foo() 
{ 
    int dummy[4]; 
    func(&dummy, __builtin_return_address(0)); 
} 

これは、常にしかし、あなたの正確なスタックポインタを与えていない可能性があります。変数にLRSPを配置する

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 
0

使用出力レジスタ:godboltあたりとして、それは次のアセンブリコード生成

void *lr, *sp; 

asm ("mov %0, sp" : "=r" (sp)); 
asm ("mov %0, lr" : "=r" (lr)); 
func(lr, sp); 
関連する問題