网站建设资讯

NEWS

网站建设资讯

arm汇编c语言函数 arm汇编函数调用过程

arm汇编里面怎么调用C语言函数?

1、1,无论是Keil工具还是ADS工具,都有一段入口汇编代码,一般叫start.s。这取决于你这个程序的Project设置,自己去找找。2,你一定要找到这个入口汇编代码的文件,然后把你的汇编函数添加到末尾。

创新互联建站-专业网站定制、快速模板网站建设、高性价比赤城网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式赤城网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖赤城地区。费用合理售后完善,10多年实体公司更值得信赖。

2、用C语言写的ARM程序调用C函数和普通的C语言格式一样,没有特殊的地方;如果用C语言调用ARM的汇编,则有规则。在C程序和ARM汇编程序之间相互调用时必须遵守ATPCS(ARM-THUMB procedure call standard )规则。

3、STR lr, [sp, #-4]! 是将lr寄存器也称链接寄存器r14(用于保存子程序的返回地址)的值(32位)存入sp指向堆栈的地址,从sp到sp-3地址单元。

4、段定义前加 PRESERVE8 伪指令试一下。前两天刚好看到 ARM UCOS 汇编代码中用到PRESERVE8这个关键字(加在段定义之前),以前没见过的,于是百度。汇编代码没有保持8字节栈对齐而调用C或C++代码。

5、汇编跳至C语言代码执行,自动调用R0,R1等来传递参数,比如R0传递给a,R1传递给b,以此类推。返回时自动用R0传递返回值。

arm编程,c语言中嵌入汇编实现1+2+3+...+100

论C和汇编的混合编程,包括相互之间的函数调用。下面分四种 情况来进行讨论,暂不涉及C++。

一般用的少,在ARM上编程经常会用到 把求和1+2+3+、、、+100写成一个C语言函数,然后保存到头文件里 在汇编包含C的头文件文件,然后在汇编中需要的地方就可以调用函数了,调用方法跟调用 汇编函数一样。

实在不会的话,先用C写出来,然后再汇编调试界面看看汇编代码,不是很难。

经过这两天靠自己不断的摸索,终于掌握了如何在编译环境中进行ARM编程,另外,还学会了在c中调用汇编程序的方法,以及如何通过linux自带的gcc编译嵌有汇编的c程序,总之,收获还是蛮多的哦,下面就总结一下吧。

举例说明ARM汇编语言函数和C语言函数互调用规则。

C程序调用汇编程序 汇编程序的设计要遵守ATPCS(ARM—Thumb Procedure Call Standard),保证程序调用时参数的正确传递。在汇编程序中使用EXPORT 伪操作声明本程序,使得本程序可以被别的程序调用。

为了建立调用与被调用模块间的连接关系,被调用的汇编程序应用global,说明其可被外部模块调用;而调用程序则应预先说明要引用的外部模块名。下面通过我的例子进行说明,该例是C调用add0的汇编子程序。

在C程序和ARM汇编程序之间相互调用时必须遵守ATPCS(ARM-THUMB procedure call standard )规则。

传递参数很简单,如果ax里放的就是参数,那么push ax,然后再调用就可以。返回值如果我没有记错的话应该在AX里。如果返回值太长,就会放到堆栈里。你想搞清楚如果跨语言编程,最好彻底明白C语言的机制。

为什么不使用BL来调用C函数?因为bl 指令跳转范围有限(好像4M左右吧),但bl指令可以将返回地址保存在lr中,当然,如果你的跳转范围不大,也可使用BL,则不需要ldr lr, =int_return 。

然后把你的汇编函数添加到末尾。3,入口汇编代码中要找到跳转到C程序入口的那条跳转语句。C程序的入口调用一般在ADS里是: B __main 这样的一句汇编。把这句改成B callsum5。


当前文章:arm汇编c语言函数 arm汇编函数调用过程
网页地址:http://njwzjz.com/article/decpscg.html