|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。( _& _ l1 {2 K" P4 g
C语言程序调用汇编语言程序完成字符串拷贝。
( S; K( I7 `+ CC语言源程序:
8 t( p: O3 O* T#include <stdio.h>& l! } s8 @( Y- I
extern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数8 O5 Q* Y1 v$ d: y, W1 @/ ]
;可被其他文件中的函数调用
) X% D' \% z; S Tint main. F3 e* r; I2 m
{const char *srcstr="First string-source";: S# [! t) q, z: {8 ? n1 ^ w
char *dststr="Second string-destination";
. K" c9 [) K' Y0 }) Eprintf("Before copying:\n");+ t- Y0 ^4 a4 _ v5 b
printf("%s\n%s\n",srcstr,dststr);
$ }) @- s8 ~7 V, e# ~4 H |* nstrcopy(srcstr,dststr); ;调用汇编函数strcopy()% k, v" G" r0 j3 S% Y
printf("After copying:\n");
( [1 ?( ^( F( P! z/ Cprintf("%s\n%s\n",srcstr,dststr);$ k0 N9 z" N. I9 l% R, Q, _7 B
return(0);
+ _. v# V& m6 w6 O6 [% @}
4 t' [0 o1 q- w7 ~8 M) h汇编语言源程序:5 a* u, m$ [; B5 \: W1 E) u
AREA SCopy,CODE,READONLY
$ \/ X1 x" ^% C' F* P& ]EXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引
/ @% C! J( W- O& X6 O6 p ;用,相当于声明了一个全局变量
& s# O' R. w" U+ _0 xStrcopy ;R0指向目标字符串,R1指向源字符串; H$ V$ A! z5 @/ q
LDRB R2,[R1],#1 ;字节加载,并更新地址
S% n; p$ Q! E+ tSTRB R2,[R0],#1 ;字节保存,并更新地址9 M) `+ T: R, g7 i7 v2 e. \ s& s
CMP R2,#0 ;检测R2是否等于0
1 W& g3 n6 B& ?2 lBNE strcopy ;若条件不成立,则继续执行
' O' U+ j+ c& V# H0 U9 Y" k+ ?MOV PC,LR ;从子程序返回+ _; \! {1 F% ]4 O
END |
|