EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
汇编C语言混合编程经验总结
. m. i( w' B# x- z- u `" U9 t8 K4 p4 G8 `9 D L
' b$ F: i" P, U
ATPCS规则体现了一种模块化设计的思想,其基本内容是C模块(函数)和汇编模块(函数)相互调用的一套规则(C51中也有类似的一套规则)。我感觉比在线汇编功能强大(不用有很多忌讳),条理更清楚(很简单的几条规则)。 ATPCS规则内容: 1)寄存器的使用规则 1、子程序之间通过寄存器r0~r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。此时r0~r3可记作A1~A4。 2、在子程序中,使用寄存器r4~r11保存局部变量。因此当进行子程序调用时要注意对这些寄存器的保存和恢复。此时r4~r11可记作V1~V8。 3、寄存器r12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作IP。 4、寄存器r13用作堆栈指针,记作SP。寄存器r14称为链接寄存器,记作LR。该寄存器用于保存子程序的返回地址。 5、寄存器r15称为程序计数器,记作PC。 2)堆栈的使用规则 ATPCS规定堆栈采用满递减类型(FD,Full Descending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低地址。 3)参数的传递规则 1、整数参数的前4个使用r0~r3传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足需要的一组连续的寄存器传递参数。 2、子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;依此类推。结果为浮点数时,通过浮点运算部件的寄存器F0、D0或者S0返回。 比较有条理,很清楚,我举两个例子: 1.汇编主程序调用C子程序 汇编程序的书写要遵循ATPCS规则,以保证程序调用时参数正确传递。在汇编程序中调用C程序的方法为: 1)在汇编程序中使用IMPORT伪指令或者extern事先声明将要调用的C语言函数; 2)通过BL指令来调用C函数。
+ ^! ~* Y3 u! V k2 P- m# P |