重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、STR lr, [sp, #-4]! 是将lr寄存器也称链接寄存器r14(用于保存子程序的返回地址)的值(32位)存入sp指向堆栈的地址,从sp到sp-3地址单元。
创新互联专业为企业提供华州网站建设、华州做网站、华州网站设计、华州网站制作等企业网站建设、网页设计与制作、华州企业网站模板建站服务,10年华州做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
2、汇编代码没有保持8字节栈对齐而调用C或C++代码。ADS下的代码用RVDS2编译时,即使已经8字节栈对齐,连接器也将之当作非8字节栈对齐。所以要用伪指令指明一下。
3、汇编跳至C语言代码执行,自动调用R0,R1等来传递参数,比如R0传递给a,R1传递给b,以此类推。返回时自动用R0传递返回值。
4、你想搞清楚如果跨语言编程,最好彻底明白C语言的机制。也就是写一段函数调用程序比如下面的 main(){ int i;} fu(int i){in j} 然后编译成汇编语言,好好研究一下。或者再复杂一点。
5、调用汇编则更简单,unsigned int UserAppPTR = 0x00081040; //设置成汇编入口的绝对地址。
论C和汇编的混合编程,包括相互之间的函数调用。下面分四种 情况来进行讨论,暂不涉及C++。
一般用的少,在ARM上编程经常会用到 把求和1+2+3+、、、+100写成一个C语言函数,然后保存到头文件里 在汇编包含C的头文件文件,然后在汇编中需要的地方就可以调用函数了,调用方法跟调用 汇编函数一样。
实在不会的话,先用C写出来,然后再汇编调试界面看看汇编代码,不是很难。
以下所说嵌入的汇编都是GUN 的C语言中嵌入ARM汇编。
C程序调用汇编程序 汇编程序的设计要遵守ATPCS(ARM—Thumb Procedure Call Standard),保证程序调用时参数的正确传递。在汇编程序中使用EXPORT 伪操作声明本程序,使得本程序可以被别的程序调用。
在C程序和ARM汇编程序之间相互调用时必须遵守ATPCS(ARM-THUMB procedure call standard )规则。
为了建立调用与被调用模块间的连接关系,被调用的汇编程序应用global,说明其可被外部模块调用;而调用程序则应预先说明要引用的外部模块名。下面通过我的例子进行说明,该例是C调用add0的汇编子程序。
你想搞清楚如果跨语言编程,最好彻底明白C语言的机制。也就是写一段函数调用程序比如下面的 main(){ int i;} fu(int i){in j} 然后编译成汇编语言,好好研究一下。或者再复杂一点。
为什么不使用BL来调用C函数?因为bl 指令跳转范围有限(好像4M左右吧),但bl指令可以将返回地址保存在lr中,当然,如果你的跳转范围不大,也可使用BL,则不需要ldr lr, =int_return 。