|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。
8 m& o7 r) [" `$ `. N- t+ pC语言程序调用汇编语言程序完成字符串拷贝。
3 g& W/ v/ Z* {0 i1 BC语言源程序:
. v, ?3 z0 e# E$ Q) h- V2 n#include <stdio.h>
: c8 ]$ n8 f. M* }extern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数
) D( Q# B. q4 d2 n/ E. a* y- r, o' Y. L ;可被其他文件中的函数调用
% Q9 M4 ] [3 x7 j. Yint main6 N- l. r6 i. n. n8 K! k( i" T
{const char *srcstr="First string-source";
4 K. ?- Y! u& X4 j& n! zchar *dststr="Second string-destination";
0 d8 B D; V0 ?# v# uprintf("Before copying:\n");5 o) i7 F; ^1 g# d" P( ?
printf("%s\n%s\n",srcstr,dststr);
3 e* s" l- @+ n2 a' X& U1 ]strcopy(srcstr,dststr); ;调用汇编函数strcopy()
6 @. B4 U l/ C Gprintf("After copying:\n");
$ X9 Z0 [# c) O* ^/ a) w2 }printf("%s\n%s\n",srcstr,dststr);
* y7 ?! o- d9 w% f/ S# r) l7 G7 Q4 Ureturn(0);
- D2 D- b9 t9 l4 t+ P( ~% `% P}
9 L+ ~- M! k+ |/ K汇编语言源程序:
$ k0 `; r" l/ R7 @# IAREA SCopy,CODE,READONLY/ U2 q; f2 i3 k! @
EXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引# c/ F" t0 G4 {0 t/ P
;用,相当于声明了一个全局变量
p% t- K: `( q% BStrcopy ;R0指向目标字符串,R1指向源字符串 T% b& V. X4 o$ q7 r# A- b$ F2 t
LDRB R2,[R1],#1 ;字节加载,并更新地址
; {2 j" R' N* [& e: M: Q/ v2 T6 NSTRB R2,[R0],#1 ;字节保存,并更新地址
8 K# S( H6 d2 q$ f' ^& J& UCMP R2,#0 ;检测R2是否等于06 m0 p. @; }( [+ N9 d8 Y
BNE strcopy ;若条件不成立,则继续执行
& {/ X% u. ~6 N; Z# |' QMOV PC,LR ;从子程序返回
; G0 `4 s8 r# m3 c! cEND |
|