|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。: E! s+ p8 O7 i/ f" q- l) v
C语言程序调用汇编语言程序完成字符串拷贝。
7 ]0 Y2 k3 A- mC语言源程序:% w2 s/ s W5 z( ? u
#include <stdio.h>
/ P! c2 ^! h1 w' K7 { h" Y- Cextern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数
* O9 K3 @5 q. H1 j3 F" {! L ;可被其他文件中的函数调用, C9 ]9 B- ? i3 U C j& n3 x
int main
2 y9 T% c4 n- z4 ?{const char *srcstr="First string-source";
( k2 K5 @/ T* _! P! R( Qchar *dststr="Second string-destination";
2 }4 B4 m$ y& h! h) [4 r! P1 sprintf("Before copying:\n");
' ]5 J( K7 H- A; eprintf("%s\n%s\n",srcstr,dststr);
! H6 @+ C- B( I; k+ _strcopy(srcstr,dststr); ;调用汇编函数strcopy()
' ?/ m _' x( i# Y; @8 a4 cprintf("After copying:\n");; e0 v5 T' E6 S
printf("%s\n%s\n",srcstr,dststr);
9 O+ R7 d. ~9 a' ~7 V- qreturn(0);5 Z1 L% S. ~5 Y
}: ~' y& t+ h' Z
汇编语言源程序:8 `" K! u" b: ]6 ]
AREA SCopy,CODE,READONLY& @# s' X' i# U1 _7 F: d! L, M
EXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引+ H$ |- T1 x& U# J7 _
;用,相当于声明了一个全局变量4 s- u) Q4 E) k( _9 T
Strcopy ;R0指向目标字符串,R1指向源字符串+ v: F5 q2 |) B/ Y
LDRB R2,[R1],#1 ;字节加载,并更新地址. e3 x% \7 P7 F, ]- x K3 v5 L
STRB R2,[R0],#1 ;字节保存,并更新地址0 h; E# t, [- @" Z
CMP R2,#0 ;检测R2是否等于0
% m- [: [7 Y3 r0 X* ZBNE strcopy ;若条件不成立,则继续执行
$ A1 |0 a, A* ?2 g1 L1 wMOV PC,LR ;从子程序返回. }2 b/ Q: O1 d0 V9 ~1 A5 Z- D) m
END |
|