|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。
" x# E# H, {! m) ZC语言程序调用汇编语言程序完成字符串拷贝。+ s: B+ S/ i; x7 t7 J
C语言源程序:
3 I8 h: T2 S* l#include <stdio.h>
" [- u( V+ l8 _' E" Qextern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数% {: B* J2 U9 Z8 q
;可被其他文件中的函数调用" z5 n% e2 H4 ]9 z1 g
int main3 A5 t- d+ ?. J B
{const char *srcstr="First string-source";
# s9 a3 n8 T" g* ?char *dststr="Second string-destination";
6 s- m- L* E4 m3 Z) m' @# uprintf("Before copying:\n");
+ m) i W5 F) }& D" vprintf("%s\n%s\n",srcstr,dststr); " ~3 ^0 z' t8 K+ `8 g
strcopy(srcstr,dststr); ;调用汇编函数strcopy()
6 k( P: d$ W9 q* Mprintf("After copying:\n");# _+ n- T$ [* ]' a3 D7 p- }6 b
printf("%s\n%s\n",srcstr,dststr);7 I n. F K1 R% |6 @) G
return(0);% [- c; J& O$ B7 h1 L: z
}
2 Z# c1 ?9 _8 Y# J: P B$ v汇编语言源程序:4 W* `# m6 o% H! q! o0 Q* A
AREA SCopy,CODE,READONLY
$ O/ X6 f; _" q2 I, R6 e. ~EXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引% k- v) k0 G d
;用,相当于声明了一个全局变量
8 ?- v# _" q i5 u, t7 [* wStrcopy ;R0指向目标字符串,R1指向源字符串! q+ [! m. O% n" G: |/ x$ W& W
LDRB R2,[R1],#1 ;字节加载,并更新地址
3 }5 Z8 @' K5 p2 l4 ^STRB R2,[R0],#1 ;字节保存,并更新地址5 X0 D9 L& ^, }( D7 y
CMP R2,#0 ;检测R2是否等于08 F7 m2 J# U- d- z9 T, H
BNE strcopy ;若条件不成立,则继续执行! l; W2 | {' c7 t: R& f+ w) G$ Q
MOV PC,LR ;从子程序返回) q" V6 f& W* V. s& A
END |
|