|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。
9 K( W# S0 ~8 J( oC语言程序调用汇编语言程序完成字符串拷贝。
! [2 d; W- L( R* A5 Q6 DC语言源程序:
) _4 o; ]# J5 ^; _8 L6 b4 v#include <stdio.h>5 L' Q% x$ s6 P; L; `
extern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数
9 b" C" d; _/ e& h! j ;可被其他文件中的函数调用
; R+ G0 h4 D0 o" z5 F2 n. dint main
" f$ A9 o+ r! ~{const char *srcstr="First string-source";
0 }. L; _( j1 F6 x! Nchar *dststr="Second string-destination";7 X" Q6 v2 \2 `4 w+ A
printf("Before copying:\n");
7 U8 M0 Y1 @2 \8 I! K- ]6 k, Kprintf("%s\n%s\n",srcstr,dststr);
" Q* z f6 H& G' I, Dstrcopy(srcstr,dststr); ;调用汇编函数strcopy(); a" P" ?' ?% i: r) y
printf("After copying:\n");
: {0 C. f* X/ M+ e5 {+ B* G, |7 iprintf("%s\n%s\n",srcstr,dststr);
2 x3 E& H5 M) l8 D' U$ D& Xreturn(0);6 Y# z* j" {% @$ @) v
}
4 m: O, b: W; N$ V( ]* t8 ]& `/ z7 P# P) j* f汇编语言源程序:
. Z; A" }: V4 L' d0 T3 a1 Z1 `! `AREA SCopy,CODE,READONLY, ^" j( n% E# F% ^
EXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引& P3 m8 y- o2 a9 I
;用,相当于声明了一个全局变量. \+ l! {6 f" d3 u. @0 {) u
Strcopy ;R0指向目标字符串,R1指向源字符串
9 \0 ]+ _+ Z3 N0 n1 b* r% y2 g! M( JLDRB R2,[R1],#1 ;字节加载,并更新地址( G! m6 @! i" {
STRB R2,[R0],#1 ;字节保存,并更新地址
# P3 o% _8 R8 w( W+ b7 GCMP R2,#0 ;检测R2是否等于0
% I% V+ M! i z: u& [5 Z7 ^) q9 eBNE strcopy ;若条件不成立,则继续执行
' ^+ o0 ~1 ~" C# JMOV PC,LR ;从子程序返回
' J* w5 x1 @9 Y) m! R/ d: |7 s6 @) MEND |
|