EDA365电子工程师网

标题: 汇编语言程序调用C语言程序 [打印本页]

作者: Dedy01    时间: 2016-7-13 16:46
标题: 汇编语言程序调用C语言程序
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在C语言程序中,不需要使用任何关键字来声明将被汇编语言调用的C语言程序,但是在汇编语言程序调用该C语言程序之前,需要在汇编语言程序中使用IMPORT伪操作声明来声明该C语言程序。在汇编语言程序中通过BL指令来调用子程序。在示例中,汇编程序strcopy完成字符串赋值功能,C语言程序调用strcopy完成字符串的复制工作。
示例
汇编语言程序调用C语言程序
int g(int a,int b,intc,int d,int e)
{
return a+b+c+d+e;
}
汇编语言程序调用C语言程序g()计算5个整数i,2xi,3xi,4xi,5xi的和。
汇编语言源程序:
EXPORT f
AREA f,CODE,READONLY
IMPORT g                ;在R0中
STR     LR,[SP,#-4]!    ;预先保存LR
ADD     R1,R0,R0        ;计算2xi(第2个参数)
ADD     R2,R1,R0        ;计算3xi(第3个参数)
ADD     R1,R0,R0        ;计算5xi(第5个参数)
STR     R3,[SP,#-4]!    ;将5个参数压入堆栈
ADD     R3,R1,R1        ;计算4xi(第4个参数)
BL   g                  ;调用C语言程序g()
ADD     SP,SP,#4        ;调整数数据栈指针,准备返回
LDR     PC,[SP],#4      ;从子程序返回
END
Linux内核分析
Linux的源代码具有开放性,其内核灰机了无数编程人员优秀的编程思想,吸引着一批批的开发者去研究它。深刻领悟Linux内核的编程思想,将是学习嵌入式Linux系统编程的基础。只有构造出更加精简、高效的嵌入式Linux内核,才可编写出更高质量的驱动程序与应用程序。
作者: 10929390    时间: 2016-7-13 17:56
路过捧场,谢谢分享!

作者: helendcany    时间: 2016-7-14 08:49
路过捧场,谢谢分享!
作者: hasky    时间: 2016-8-16 10:40
学习了!3Q
作者: Abricy    时间: 2016-8-16 10:48
路过捧场,谢谢分享!

作者: 10929390    时间: 2016-8-16 11:43
感谢楼主分享!!!

作者: cyxs    时间: 2016-8-23 15:21
学习中,谢谢分享





欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/) Powered by Discuz! X3.2