|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在C语言程序中,不需要使用任何关键字来声明将被汇编语言调用的C语言程序,但是在汇编语言程序调用该C语言程序之前,需要在汇编语言程序中使用IMPORT伪操作声明来声明该C语言程序。在汇编语言程序中通过BL指令来调用子程序。在示例中,汇编程序strcopy完成字符串赋值功能,C语言程序调用strcopy完成字符串的复制工作。& m+ O7 J+ d. z y
示例
' O& i6 D' t) k+ N3 |( c2 u) O汇编语言程序调用C语言程序& H3 L/ z& y8 \0 _7 ^! r1 {" U5 W
int g(int a,int b,intc,int d,int e)% @- k: m. y: Q1 L- B2 A0 D8 T8 ]
{0 x. H/ ]/ D+ r" R- J9 _
return a+b+c+d+e;
) r; d: t" R; {8 q1 ^: J}
3 s ^ r' F" M* a+ P0 Y* x汇编语言程序调用C语言程序g()计算5个整数i,2xi,3xi,4xi,5xi的和。$ @/ G0 T4 _( N$ Y% ]( R
汇编语言源程序:, ]/ `9 b! j W j. b
EXPORT f6 _( N6 G9 U: |. M* H7 r
AREA f,CODE,READONLY
3 W2 O; G5 H- ^9 q. f3 f5 XIMPORT g ;在R0中! J6 | c! ^5 o* _1 q: A
STR LR,[SP,#-4]! ;预先保存LR
1 c) k( ~" d L$ u j' f% d0 R" z* PADD R1,R0,R0 ;计算2xi(第2个参数); _- r9 m3 n. h% a5 S& j
ADD R2,R1,R0 ;计算3xi(第3个参数). l' o* c6 p) V& L7 E
ADD R1,R0,R0 ;计算5xi(第5个参数)
8 x; k% m9 x* Y) E0 fSTR R3,[SP,#-4]! ;将5个参数压入堆栈* y* Y$ [' P m) h# N
ADD R3,R1,R1 ;计算4xi(第4个参数)
# R; y5 A5 I7 B C& q uBL g ;调用C语言程序g()
# z' Q' W# N5 q3 g6 L U; K! nADD SP,SP,#4 ;调整数数据栈指针,准备返回1 c. h* j: M: Y& i+ n7 [! \
LDR PC,[SP],#4 ;从子程序返回: O6 |9 T1 o8 E6 F9 V# g
END
. }, y% S9 Z- b1 v8 h" r' d5 RLinux内核分析
& r- V# U4 d* Z' uLinux的源代码具有开放性,其内核灰机了无数编程人员优秀的编程思想,吸引着一批批的开发者去研究它。深刻领悟Linux内核的编程思想,将是学习嵌入式Linux系统编程的基础。只有构造出更加精简、高效的嵌入式Linux内核,才可编写出更高质量的驱动程序与应用程序。 |
|