|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在C语言程序中,不需要使用任何关键字来声明将被汇编语言调用的C语言程序,但是在汇编语言程序调用该C语言程序之前,需要在汇编语言程序中使用IMPORT伪操作声明来声明该C语言程序。在汇编语言程序中通过BL指令来调用子程序。在示例中,汇编程序strcopy完成字符串赋值功能,C语言程序调用strcopy完成字符串的复制工作。/ m" S) a% P( M0 i/ M
示例
. y, Y+ I, W- ~& S汇编语言程序调用C语言程序* B- m8 E& X& R/ T6 D4 l
int g(int a,int b,intc,int d,int e)( b* |9 T' Z% b. [' }
{' K5 h" x+ l, B# r7 G- N! J
return a+b+c+d+e;$ _: P- s9 }; S+ M
}& ]4 A5 e# s. d$ n( O# r. r5 [
汇编语言程序调用C语言程序g()计算5个整数i,2xi,3xi,4xi,5xi的和。' U1 y' c$ Q/ V
汇编语言源程序:
- l2 {. C5 C+ I) DEXPORT f- @" O+ Y0 t8 }8 Y1 R# I) e
AREA f,CODE,READONLY: ]; p" X$ r! `6 E
IMPORT g ;在R0中
, D; K" o/ s; ]/ V3 a. hSTR LR,[SP,#-4]! ;预先保存LR
+ d* d* b4 J" o) _8 gADD R1,R0,R0 ;计算2xi(第2个参数)
+ G' F5 W6 X3 {" K7 z2 oADD R2,R1,R0 ;计算3xi(第3个参数)( N6 |" l1 r: |; I5 I
ADD R1,R0,R0 ;计算5xi(第5个参数)8 m0 Q6 I( G0 I* U4 l7 Q8 ]/ ]
STR R3,[SP,#-4]! ;将5个参数压入堆栈! Y+ i- C2 j0 q: A. ~ X
ADD R3,R1,R1 ;计算4xi(第4个参数)3 t% e: q8 v8 H
BL g ;调用C语言程序g()
/ j5 q8 X1 T' h, P& ], sADD SP,SP,#4 ;调整数数据栈指针,准备返回
; L @% Z4 {% A$ \$ V7 u1 _LDR PC,[SP],#4 ;从子程序返回
1 e* @' K/ i: p- p) R( ?$ v+ S CEND$ J6 v) {2 V8 Z# g% J6 O J {2 w$ U
Linux内核分析 E1 S- k5 D( K, _
Linux的源代码具有开放性,其内核灰机了无数编程人员优秀的编程思想,吸引着一批批的开发者去研究它。深刻领悟Linux内核的编程思想,将是学习嵌入式Linux系统编程的基础。只有构造出更加精简、高效的嵌入式Linux内核,才可编写出更高质量的驱动程序与应用程序。 |
|