|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在C语言程序中,不需要使用任何关键字来声明将被汇编语言调用的C语言程序,但是在汇编语言程序调用该C语言程序之前,需要在汇编语言程序中使用IMPORT伪操作声明来声明该C语言程序。在汇编语言程序中通过BL指令来调用子程序。在示例中,汇编程序strcopy完成字符串赋值功能,C语言程序调用strcopy完成字符串的复制工作。
0 e; Z+ X$ E0 ]5 l. d示例
* x" a J- e% t% k$ A汇编语言程序调用C语言程序
/ B; |8 C% n2 U" _# b% mint g(int a,int b,intc,int d,int e)1 k9 w; H% [4 y. O# h- q
{
* ]" a6 Y% j% H; k$ S, c& m1 {( Nreturn a+b+c+d+e;
* d; G. b7 S. ?}* v/ G/ p% V) h3 u% {- G) H
汇编语言程序调用C语言程序g()计算5个整数i,2xi,3xi,4xi,5xi的和。! k; J ~& @( A* k
汇编语言源程序:0 M# `( |9 i* S
EXPORT f+ m" k2 P/ w8 ?8 |' P
AREA f,CODE,READONLY
3 H: Z- h t1 KIMPORT g ;在R0中2 D1 G0 C3 e3 ?4 Q! _
STR LR,[SP,#-4]! ;预先保存LR2 I' ~1 J9 E. q0 u! w
ADD R1,R0,R0 ;计算2xi(第2个参数)
5 i! Q* l" w9 n+ AADD R2,R1,R0 ;计算3xi(第3个参数)9 l' b5 L1 G6 Q, Q& G$ J1 j
ADD R1,R0,R0 ;计算5xi(第5个参数)* Z: E9 x9 H4 Y' K# y- ^; z
STR R3,[SP,#-4]! ;将5个参数压入堆栈' g5 N0 v* f) z9 f) l
ADD R3,R1,R1 ;计算4xi(第4个参数)
/ n S: b, ?3 d1 L. A/ uBL g ;调用C语言程序g(); C/ X8 X& v- V0 X1 g; C# j: e
ADD SP,SP,#4 ;调整数数据栈指针,准备返回+ B3 i9 w7 {" ^) W7 C! H
LDR PC,[SP],#4 ;从子程序返回, K- x( c W" m: c% S$ ?
END
) G+ f% q+ U. r. B" o2 s+ BLinux内核分析- C: Y$ S7 ~4 k" [6 k5 l; z% K
Linux的源代码具有开放性,其内核灰机了无数编程人员优秀的编程思想,吸引着一批批的开发者去研究它。深刻领悟Linux内核的编程思想,将是学习嵌入式Linux系统编程的基础。只有构造出更加精简、高效的嵌入式Linux内核,才可编写出更高质量的驱动程序与应用程序。 |
|