|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。9 t ]1 j8 d! v1 B1 Z( V
C语言程序调用汇编语言程序完成字符串拷贝。" R& u: Z4 G4 T0 D
C语言源程序:6 m! B8 m4 s/ f' c) V% a. H! f+ ~: ~
#include <stdio.h>
7 p+ y( [; B) F+ ~/ cextern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数
3 y$ n. A% ^( E& Z; x3 X ;可被其他文件中的函数调用, {& X$ R; n* N9 L! Z [; Q
int main4 C2 \) f, z$ M3 o( S
{const char *srcstr="First string-source";
9 Q2 k( }! c K8 `0 rchar *dststr="Second string-destination";
v& f$ q3 k) y; T" O8 qprintf("Before copying:\n");
, R- J) _. }# H# {% i; K( D+ F. }printf("%s\n%s\n",srcstr,dststr); # h& o+ s: @* _0 j4 P2 Q+ z
strcopy(srcstr,dststr); ;调用汇编函数strcopy()
, ?3 z4 i1 g3 E+ P9 |! R- z0 s0 cprintf("After copying:\n");* G! e Z, u9 t: ^1 c4 D+ f2 h1 b
printf("%s\n%s\n",srcstr,dststr);
4 N2 W/ Y' B i) Q A% lreturn(0);3 |/ I' S2 E8 D$ i+ Q
}
9 d( n- M! \6 N" B0 t汇编语言源程序:
. w, y9 Q0 Q- C$ e' P, w4 ^4 OAREA SCopy,CODE,READONLY
3 D6 ]; `- U6 ^' B. ZEXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引8 Y; ~; r# O4 s# N
;用,相当于声明了一个全局变量0 q! f7 t* k7 m* K; z
Strcopy ;R0指向目标字符串,R1指向源字符串/ F! w/ Y+ @0 o C# f
LDRB R2,[R1],#1 ;字节加载,并更新地址- s/ Y9 M2 s- O% j/ Q
STRB R2,[R0],#1 ;字节保存,并更新地址
7 V$ z" E& m; o1 j" M* B- ?CMP R2,#0 ;检测R2是否等于03 R; |9 W& l8 z, r) v4 L
BNE strcopy ;若条件不成立,则继续执行
! ^/ m+ d1 s7 e# U% B) h% TMOV PC,LR ;从子程序返回3 D5 v3 v6 U5 c- }0 T" D
END |
|