|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在C语言程序中,不需要使用任何关键字来声明将被汇编语言调用的C语言程序,但是在汇编语言程序调用该C语言程序之前,需要在汇编语言程序中使用IMPORT伪操作声明来声明该C语言程序。在汇编语言程序中通过BL指令来调用子程序。在示例中,汇编程序strcopy完成字符串赋值功能,C语言程序调用strcopy完成字符串的复制工作。
8 v% |5 ~$ I' Y' T3 w( P示例. W+ g- n2 j6 R
汇编语言程序调用C语言程序4 N/ h7 A$ P$ G
int g(int a,int b,intc,int d,int e)
. s9 s# S# |) M1 P# {{
# i" D6 w& C( X: @return a+b+c+d+e;
* C0 M$ w% ^& m. { @1 }. q% ]+ n}* N0 s. {+ i! ]; v) g* V, f1 b
汇编语言程序调用C语言程序g()计算5个整数i,2xi,3xi,4xi,5xi的和。
" l, j- E$ Y" a: n0 H0 a7 Y汇编语言源程序:
; y( ?$ m7 _- _ B# fEXPORT f+ n; L1 v% ~ a$ v1 R& Q
AREA f,CODE,READONLY4 P. P3 Y4 ^" M) s1 C' D
IMPORT g ;在R0中
% c; C" ~# [ f3 Z9 Y5 E) DSTR LR,[SP,#-4]! ;预先保存LR0 A) h$ T4 J$ B2 {
ADD R1,R0,R0 ;计算2xi(第2个参数)
8 x0 _/ Y1 r. `/ v) Q4 hADD R2,R1,R0 ;计算3xi(第3个参数)
. P: H" V; J' ?* H* i, J8 lADD R1,R0,R0 ;计算5xi(第5个参数)
9 V6 m2 [7 g b% t9 S; nSTR R3,[SP,#-4]! ;将5个参数压入堆栈$ U+ {* }7 q3 ?" R
ADD R3,R1,R1 ;计算4xi(第4个参数)+ h5 y+ {+ j- m7 t3 {
BL g ;调用C语言程序g(). y8 U7 I- I8 p
ADD SP,SP,#4 ;调整数数据栈指针,准备返回- s9 S) J: {/ _7 s% g V' ~# b
LDR PC,[SP],#4 ;从子程序返回& L" v; T4 Z: o N9 [7 F0 x4 |
END
6 e, }" e8 b6 C2 j6 @2 W$ d/ C/ nLinux内核分析
2 O! D& V/ m& C" \& sLinux的源代码具有开放性,其内核灰机了无数编程人员优秀的编程思想,吸引着一批批的开发者去研究它。深刻领悟Linux内核的编程思想,将是学习嵌入式Linux系统编程的基础。只有构造出更加精简、高效的嵌入式Linux内核,才可编写出更高质量的驱动程序与应用程序。 |
|