|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。0 O2 K4 ?* s4 ]. k1 q+ {' i
C语言程序调用汇编语言程序完成字符串拷贝。) u1 f) u, Z" B, J4 w( g( _" O
C语言源程序:) E8 X1 Z6 J7 V' d2 t( H" A: v
#include <stdio.h>
3 Z# ~- u, x0 g1 ]- textern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数
* u5 C, V" \/ _2 P! { ;可被其他文件中的函数调用# s; ~/ K7 H/ u
int main% I6 l: q. X* s4 e
{const char *srcstr="First string-source";; q$ ]& k& P% @& k( D/ L4 t
char *dststr="Second string-destination";
9 r* `+ k; }. H% U- Cprintf("Before copying:\n");
* T% ^7 ^5 \, k/ P- I# v' A3 e. B! Dprintf("%s\n%s\n",srcstr,dststr); & J: _ x5 c! p) a- J) l' v2 C' @# O
strcopy(srcstr,dststr); ;调用汇编函数strcopy()
/ K- _* D2 G. j' Y, [7 ?+ pprintf("After copying:\n");8 g/ A0 ~, b1 u# Z% J& n
printf("%s\n%s\n",srcstr,dststr);
7 j( c9 _" E8 d5 sreturn(0);
0 f/ k& j" H* y& [6 R6 p z$ N1 l}# |* G& _& k/ T( i
汇编语言源程序:
3 b, F- K, k9 t7 w/ T/ P, \AREA SCopy,CODE,READONLY) U) F) v+ i2 Y
EXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引1 \( [6 r$ G7 v; m$ [
;用,相当于声明了一个全局变量
: B- X' [2 J0 A- SStrcopy ;R0指向目标字符串,R1指向源字符串6 w# }9 e- m) {1 I$ W* {& q
LDRB R2,[R1],#1 ;字节加载,并更新地址
# t+ Z% I `! FSTRB R2,[R0],#1 ;字节保存,并更新地址- a$ Q; B/ a0 X& W ?
CMP R2,#0 ;检测R2是否等于0
6 m7 _% u$ m+ a7 \9 ABNE strcopy ;若条件不成立,则继续执行; i' I) ?$ F2 J: @( Y+ m7 I1 _1 J
MOV PC,LR ;从子程序返回
) |5 b# @! e, L6 q. SEND |
|