|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。 m |* ^+ @2 H
C语言程序调用汇编语言程序完成字符串拷贝。' L: [. n. S7 X5 q( i
C语言源程序:$ H/ z" S9 Y) m6 i1 x
#include <stdio.h> v% t* G6 y& E. {5 j' |
extern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数
9 h/ ?5 M/ V% V; G& m2 o ;可被其他文件中的函数调用
1 r- N! R0 v% q$ ~% |( ]6 D- \. fint main
( q5 E: o7 }; R{const char *srcstr="First string-source";& G. R5 z3 h2 x( T8 u6 ~
char *dststr="Second string-destination";
' e3 C: R7 a( ]3 fprintf("Before copying:\n");! ^5 O! J4 A& Q% L; S
printf("%s\n%s\n",srcstr,dststr); ; c6 l$ O! f, n `1 U- [8 C, `
strcopy(srcstr,dststr); ;调用汇编函数strcopy()- Z9 [7 x8 D6 u) K0 E" X
printf("After copying:\n");& M$ [$ G6 Z2 J- l; @; l5 T
printf("%s\n%s\n",srcstr,dststr);
' h4 d1 N) ] zreturn(0);
- A h+ K+ Q+ e$ X}+ }7 }7 ]% w. o. a- o; o
汇编语言源程序:7 j0 v% R1 f& H5 Y0 f. e
AREA SCopy,CODE,READONLY. q/ r# c; d; m2 n+ d0 ~6 S
EXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引% D8 b) ^4 w8 ~ P) g
;用,相当于声明了一个全局变量2 B% }3 h+ N5 M9 K; N3 |
Strcopy ;R0指向目标字符串,R1指向源字符串2 O5 f3 U1 {: T
LDRB R2,[R1],#1 ;字节加载,并更新地址
; T4 L* U) r$ n7 I- e5 _STRB R2,[R0],#1 ;字节保存,并更新地址
3 ]7 K1 p: t4 N" @, HCMP R2,#0 ;检测R2是否等于0* M$ ~/ c R; T# \, Z: e7 i
BNE strcopy ;若条件不成立,则继续执行
: Y U( B4 ^; ZMOV PC,LR ;从子程序返回2 A" U; R5 R; Y0 j) R( t* Y
END |
|