arm 汇编语言调用C 函数之参数传递 于 ARM 体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS( ARM-Thu mb Procedu re Call Standard),ATPCS主要是定义了函数呼叫时参数的传递规则以及如何从函数返回,关于ATPCS 的详细内容可以查看ADS1
2 Online Books ——Dev eloper Gu ide 的 2
这篇文档要讲的是 汇编代码中对C 函数调用时如何进行参数的传递以及如何从C 函数正确返回
不同于x 86 的参数传递规则,ATPCS 建议函数的形参不超过4 个,如果形参个数少于或等于4,则形参由R0,R1,R2,R3 四个寄存器进行传递;若形参个数大于4,大于4 的部分必须通过堆栈进行传递
我们先讨论一下形参个数为4 的情况
实例1: test_asm_args
asm //-------------------------------------------------------------------------------- IMPORT test_c_args ;声明test_c_args 函数 AREA TEST_ASM, CODE, READONLY EXPORT test_asm_args test_asm_args STR lr, [sp, #-4]
;保存当前lr ldr r0,=0x 10 ;参数 1 ldr r1,=0x 20 ;参数 2 ldr r2,=0x30 ;参数 3 ldr r3,=0x40 ;参数 4 bl test_c_args ;调用C 函数 LDR pc, [sp], #4 ;将 lr 装进pc(返回main 函数) END test_c_args
c //--------------------------------