|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。( j2 |3 s+ g3 G
C语言程序调用汇编语言程序完成字符串拷贝。( Z% H1 s9 K1 f
C语言源程序:& \. r: w$ C; n2 _* ] q+ \7 B0 N
#include <stdio.h>$ z* r, I$ _, C' p* d
extern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数
! P8 c, }7 `9 U$ L, Y3 S ;可被其他文件中的函数调用
2 b) v8 `0 q* s4 ~int main
6 r, r! F9 p( ]6 t: f& j, V{const char *srcstr="First string-source";
; k+ v O7 e# @char *dststr="Second string-destination";% ~: I; g9 ?& T1 N5 g @1 Y0 {% r
printf("Before copying:\n");0 @* m. V# q4 h6 |5 x7 P% j6 g8 A
printf("%s\n%s\n",srcstr,dststr);
9 T& ~! J6 G$ g6 A! Istrcopy(srcstr,dststr); ;调用汇编函数strcopy(): a3 \ M6 `& L# D. I
printf("After copying:\n");/ q0 t1 Q9 D6 L! c7 M- Q
printf("%s\n%s\n",srcstr,dststr);1 f; ~1 D* T ~8 [2 Q: b, |
return(0);1 @9 H ^8 K+ |- m
} z9 Q# M3 T# G
汇编语言源程序:
: t( A$ p5 x9 k% l# V1 o: o: KAREA SCopy,CODE,READONLY8 K5 g2 _' t! ~: y9 O5 u
EXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引7 v5 n5 b/ P; k+ {! g2 b* e
;用,相当于声明了一个全局变量
3 H8 s/ o% t+ T; K. {9 KStrcopy ;R0指向目标字符串,R1指向源字符串: b i9 K' U( R5 \
LDRB R2,[R1],#1 ;字节加载,并更新地址
: ^, ~* L7 S' b3 |+ qSTRB R2,[R0],#1 ;字节保存,并更新地址
% t6 n- ^. h% n8 M0 lCMP R2,#0 ;检测R2是否等于0! R! H( z* a0 C, B% _. _ Q( i
BNE strcopy ;若条件不成立,则继续执行
8 [) J9 ?* i+ ^6 g; r9 i) ~3 jMOV PC,LR ;从子程序返回' ?4 ]6 P* U L5 n9 G
END |
|