|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。' }& z! p% ^7 [7 R( G, y- T, U
C语言程序调用汇编语言程序完成字符串拷贝。
% c; V) A# M4 N! I J: @C语言源程序:
( Q& d0 |& B6 `#include <stdio.h>
9 B, Y) M6 ?4 F2 Q( N, Yextern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数* {' f' V! y1 v& F, S0 b
;可被其他文件中的函数调用
: L3 O/ o! C. K4 o7 pint main* P+ l2 M, I; N; h, {
{const char *srcstr="First string-source";+ n6 q. @( D+ k* p; g
char *dststr="Second string-destination";
' j& j' ]5 r3 W3 Y/ I$ E6 Vprintf("Before copying:\n");
$ X# |* [" p# a @$ D, ^printf("%s\n%s\n",srcstr,dststr); ( G" y' [; S7 P- t
strcopy(srcstr,dststr); ;调用汇编函数strcopy()
# M: F) F! s3 j6 K$ F3 w* Tprintf("After copying:\n");. b" G$ ]: T2 Z% U/ T# n! E
printf("%s\n%s\n",srcstr,dststr);
) y9 o& ]5 N% W7 Creturn(0);
) Q) R3 r3 _" E: Y1 A}+ _! I, w v+ h' W$ l3 @- s0 \4 W
汇编语言源程序:2 t3 G; f; Y' H: P
AREA SCopy,CODE,READONLY
, `& Y3 v/ r$ j- u5 MEXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引
# F% i( }1 D* [4 {# L ;用,相当于声明了一个全局变量
9 o! x; x v: ?. Z" U1 NStrcopy ;R0指向目标字符串,R1指向源字符串
: a" r" ]6 g8 ^' \5 z+ A KLDRB R2,[R1],#1 ;字节加载,并更新地址) E/ a+ e$ q Q9 z5 ~
STRB R2,[R0],#1 ;字节保存,并更新地址
! i! G7 ^. ~+ D( lCMP R2,#0 ;检测R2是否等于0* l+ j4 l) s8 L6 Y: s
BNE strcopy ;若条件不成立,则继续执行; B# V- {) j# R" c5 b
MOV PC,LR ;从子程序返回
. A$ n9 [3 I& U* J' A, REND |
|