|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在C语言程序中,不需要使用任何关键字来声明将被汇编语言调用的C语言程序,但是在汇编语言程序调用该C语言程序之前,需要在汇编语言程序中使用IMPORT伪操作声明来声明该C语言程序。在汇编语言程序中通过BL指令来调用子程序。在示例中,汇编程序strcopy完成字符串赋值功能,C语言程序调用strcopy完成字符串的复制工作。+ c+ W: m( d9 n# |1 |8 X
示例
: d7 [1 d5 {/ k1 O. G8 f. Y汇编语言程序调用C语言程序
2 p; U3 M8 j% T7 ]$ C j9 V& `$ Kint g(int a,int b,intc,int d,int e)" o7 B3 x. F! N7 {6 h- K
{1 C9 i+ o9 `) p
return a+b+c+d+e;8 _, N0 @; }$ t
} ]& n4 W0 ~4 f1 d6 H$ J
汇编语言程序调用C语言程序g()计算5个整数i,2xi,3xi,4xi,5xi的和。# B& W4 A6 Y2 Z2 P, y
汇编语言源程序:
$ F7 R4 Y9 l. T- S* \& k4 WEXPORT f
% x5 t m4 W H0 b5 U) h+ @AREA f,CODE,READONLY
: K1 `/ ?1 u9 M8 i" _IMPORT g ;在R0中- k1 B5 A2 Z! u; _# c( T
STR LR,[SP,#-4]! ;预先保存LR
, t a2 k) N) X- b3 h9 ?ADD R1,R0,R0 ;计算2xi(第2个参数)
( f5 F+ B. y+ R' c, ]6 i" S2 ZADD R2,R1,R0 ;计算3xi(第3个参数)
4 O2 ~% m# Z7 O& r& D- N: nADD R1,R0,R0 ;计算5xi(第5个参数)2 C" [( F% ?1 w
STR R3,[SP,#-4]! ;将5个参数压入堆栈
9 z8 I! n! d, J. S$ a5 JADD R3,R1,R1 ;计算4xi(第4个参数)
- T+ I$ l1 ^6 ^' j; E: ~6 tBL g ;调用C语言程序g()' V$ a0 @$ O5 I/ D
ADD SP,SP,#4 ;调整数数据栈指针,准备返回
9 ~; V ]- R" B+ K- A7 n2 n; eLDR PC,[SP],#4 ;从子程序返回
5 [& N9 A3 }1 A& h4 NEND: K" L- R% ^% R* Y
Linux内核分析! I5 \! G) }* k5 }
Linux的源代码具有开放性,其内核灰机了无数编程人员优秀的编程思想,吸引着一批批的开发者去研究它。深刻领悟Linux内核的编程思想,将是学习嵌入式Linux系统编程的基础。只有构造出更加精简、高效的嵌入式Linux内核,才可编写出更高质量的驱动程序与应用程序。 |
|