|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在C语言程序中,不需要使用任何关键字来声明将被汇编语言调用的C语言程序,但是在汇编语言程序调用该C语言程序之前,需要在汇编语言程序中使用IMPORT伪操作声明来声明该C语言程序。在汇编语言程序中通过BL指令来调用子程序。在示例中,汇编程序strcopy完成字符串赋值功能,C语言程序调用strcopy完成字符串的复制工作。6 X4 a) m$ o7 P* @
示例, R4 h1 z+ \7 o% d
汇编语言程序调用C语言程序, A- L' s1 l: ]! s d
int g(int a,int b,intc,int d,int e)
( \9 y. t: _* H/ w5 m{
5 D2 l6 Z; U0 x( dreturn a+b+c+d+e;" ?; R8 u7 K. `. F: K- T
}$ t, s) D' ^! f% l5 d* R# {
汇编语言程序调用C语言程序g()计算5个整数i,2xi,3xi,4xi,5xi的和。0 I. K: Y. q. Z7 N8 k$ g
汇编语言源程序:
% r6 L0 P) L0 a, ^/ W, [" wEXPORT f2 Y5 e1 w6 S1 S8 |% z
AREA f,CODE,READONLY
3 `6 R. ~) ~% d+ B1 hIMPORT g ;在R0中3 \4 [) F' c7 `- d7 K: Z8 A
STR LR,[SP,#-4]! ;预先保存LR3 r# {! J. l8 f# D9 i* O
ADD R1,R0,R0 ;计算2xi(第2个参数)
9 j$ `6 U. S6 \; M+ S8 H, |ADD R2,R1,R0 ;计算3xi(第3个参数)( C0 a& K' z) D7 ~9 q
ADD R1,R0,R0 ;计算5xi(第5个参数)
: w+ B& C' H$ TSTR R3,[SP,#-4]! ;将5个参数压入堆栈7 N+ D+ C7 |) p- g4 B& h
ADD R3,R1,R1 ;计算4xi(第4个参数)6 Y! b- Z7 L2 j S& i
BL g ;调用C语言程序g()- G; H' Y7 ]( e1 j# S
ADD SP,SP,#4 ;调整数数据栈指针,准备返回* d5 @+ a3 |6 a. x! O5 O
LDR PC,[SP],#4 ;从子程序返回( w2 X! m' s, X ^# M! {" C
END
2 ~( F. n# ]4 n( o7 \' ?; g! yLinux内核分析3 k6 k6 k7 o5 D% R: |- l) @
Linux的源代码具有开放性,其内核灰机了无数编程人员优秀的编程思想,吸引着一批批的开发者去研究它。深刻领悟Linux内核的编程思想,将是学习嵌入式Linux系统编程的基础。只有构造出更加精简、高效的嵌入式Linux内核,才可编写出更高质量的驱动程序与应用程序。 |
|