|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在C语言程序中,不需要使用任何关键字来声明将被汇编语言调用的C语言程序,但是在汇编语言程序调用该C语言程序之前,需要在汇编语言程序中使用IMPORT伪操作声明来声明该C语言程序。在汇编语言程序中通过BL指令来调用子程序。在示例中,汇编程序strcopy完成字符串赋值功能,C语言程序调用strcopy完成字符串的复制工作。2 j# a8 L3 S2 N2 P* X6 o: Y% y1 S! z
示例8 X' n, J" E a# Q! O
汇编语言程序调用C语言程序
. ]3 L) Z0 \2 s* E i) l `int g(int a,int b,intc,int d,int e)
6 j3 K" o9 w, g" J& d) X{/ f2 @1 U/ ~3 } q3 J
return a+b+c+d+e;
4 J+ I. s) ^) ~}
' R/ j# X5 ]7 V l7 c5 R汇编语言程序调用C语言程序g()计算5个整数i,2xi,3xi,4xi,5xi的和。9 `4 x7 r- {4 A% J. z% I- z& _
汇编语言源程序:* t/ X' I# P/ f. r) m- @' c' M
EXPORT f- Y4 g2 V# H K
AREA f,CODE,READONLY! O$ C5 I" `( ?
IMPORT g ;在R0中
; l; {% I$ `& F. q4 ASTR LR,[SP,#-4]! ;预先保存LR
* ?1 z n! D) i" i0 ~/ mADD R1,R0,R0 ;计算2xi(第2个参数)
* W+ }6 T" i2 M( I4 m+ A4 LADD R2,R1,R0 ;计算3xi(第3个参数)
+ O2 ?' G! A- } e7 \! H% J+ L$ IADD R1,R0,R0 ;计算5xi(第5个参数)4 M) |# a. \: L2 }) O
STR R3,[SP,#-4]! ;将5个参数压入堆栈
- N# |0 a6 |: ?6 m5 l$ p* OADD R3,R1,R1 ;计算4xi(第4个参数)
% K+ e: @% j0 e4 |0 ~BL g ;调用C语言程序g()
5 z1 ~( M5 G: b# w0 o; ^ADD SP,SP,#4 ;调整数数据栈指针,准备返回
8 f a- f- K1 j2 X) R! A d) N9 GLDR PC,[SP],#4 ;从子程序返回
. @( G; L# m$ ~* ?END
4 o& T. W1 l4 P$ m! S- BLinux内核分析
+ R; X/ {) R9 E) k( qLinux的源代码具有开放性,其内核灰机了无数编程人员优秀的编程思想,吸引着一批批的开发者去研究它。深刻领悟Linux内核的编程思想,将是学习嵌入式Linux系统编程的基础。只有构造出更加精简、高效的嵌入式Linux内核,才可编写出更高质量的驱动程序与应用程序。 |
|