|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在C语言程序中,不需要使用任何关键字来声明将被汇编语言调用的C语言程序,但是在汇编语言程序调用该C语言程序之前,需要在汇编语言程序中使用IMPORT伪操作声明来声明该C语言程序。在汇编语言程序中通过BL指令来调用子程序。在示例中,汇编程序strcopy完成字符串赋值功能,C语言程序调用strcopy完成字符串的复制工作。8 f# K9 Q' d# T6 u/ P
示例8 h2 F3 N3 P# p! C5 F7 \$ f
汇编语言程序调用C语言程序0 R3 K/ m. F6 [) G1 m, O7 g
int g(int a,int b,intc,int d,int e)4 a5 S$ ], `$ a" Z% s* D
{' x' H, m+ W8 g4 v1 }# l
return a+b+c+d+e;
0 M- W& _2 @' N* N& P3 G* ~! p}+ m0 G1 a6 _8 t
汇编语言程序调用C语言程序g()计算5个整数i,2xi,3xi,4xi,5xi的和。$ k5 n2 @! O+ T# B: }
汇编语言源程序:, p6 ~+ p& X# T: x! `6 o
EXPORT f$ [0 ~* l' C+ Z
AREA f,CODE,READONLY
* `. g: h P; z; Y8 A/ ~IMPORT g ;在R0中; h/ ?% x1 Z8 ?3 B+ [2 f
STR LR,[SP,#-4]! ;预先保存LR1 S2 S3 x P- m: L" s
ADD R1,R0,R0 ;计算2xi(第2个参数)7 k" R. L, ]: }
ADD R2,R1,R0 ;计算3xi(第3个参数)
. h( O- B2 h3 h0 n: A- j2 U9 NADD R1,R0,R0 ;计算5xi(第5个参数)( E5 u% z5 E6 Q
STR R3,[SP,#-4]! ;将5个参数压入堆栈
0 Z% Y! `* N. f. q I0 LADD R3,R1,R1 ;计算4xi(第4个参数)
) p$ {5 |- T: TBL g ;调用C语言程序g()9 a6 W9 T; K" o6 m( S
ADD SP,SP,#4 ;调整数数据栈指针,准备返回8 M6 V( i5 {2 o* @
LDR PC,[SP],#4 ;从子程序返回. c' d# h" `6 ]0 K; I% O. [
END
& {+ R: ^3 I" k7 [Linux内核分析& F9 z9 U& X( T; W- M% O% G
Linux的源代码具有开放性,其内核灰机了无数编程人员优秀的编程思想,吸引着一批批的开发者去研究它。深刻领悟Linux内核的编程思想,将是学习嵌入式Linux系统编程的基础。只有构造出更加精简、高效的嵌入式Linux内核,才可编写出更高质量的驱动程序与应用程序。 |
|