EDA365电子论坛网

标题: C语言程序调用汇编语言程序 [打印本页]

作者: yhg-lee    时间: 2016-7-13 15:03
标题: C语言程序调用汇编语言程序
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。
( o0 q- E# f# Y, @C语言程序调用汇编语言程序完成字符串拷贝。
! G8 F0 c9 c/ Y% [) zC语言源程序:+ [: U% t) R8 P4 J
#include <stdio.h>
4 [# l. j) k+ \extern void strcopy(char *d,const char *s)  ;用extern声明一个函数为外部函数
- h( u9 X# J' A) q0 t+ \; ?' Y& ]                                            ;可被其他文件中的函数调用
- z7 Z$ s; m: a8 Q0 g6 |int main1 j: A7 L# A$ U/ B9 d1 k) t4 D
{const char *srcstr="First string-source";
' E' T+ q+ Y2 \char *dststr="Second string-destination";
# [/ F6 A1 X2 {' ]* }( J5 Kprintf("Before copying:\n");
9 w( o1 d8 Q. W! W: j0 f" bprintf("%s\n%s\n",srcstr,dststr);   - a2 U1 m4 [0 p5 y
strcopy(srcstr,dststr);                     ;调用汇编函数strcopy()# [5 R! e" s! t- N1 e2 T
printf("After copying:\n");3 N% c6 Q/ R: q; ~  B/ t
printf("%s\n%s\n",srcstr,dststr);! ^; d/ g/ s8 `6 [) E; U
return(0);) Q  v: s1 l* }" N, p7 o
}
+ J: x6 ]# i/ K+ h0 W$ n汇编语言源程序:% t$ e, e4 Z" `
AREA SCopy,CODE,READONLY
' x3 B  O( L2 ^9 F8 b9 s! h2 R# iEXPORT strcopy          ;用EXPORT伪操作声明该变量可被其他文件引5 w% B, z3 Y8 n1 |5 C2 Y
                        ;用,相当于声明了一个全局变量
, a4 r6 r; W6 \5 v3 lStrcopy                 ;R0指向目标字符串,R1指向源字符串
2 d8 v* l- s" O& YLDRB    R2,[R1],#1      ;字节加载,并更新地址
% ^3 E/ f3 g0 t4 W2 R' j# ?STRB    R2,[R0],#1      ;字节保存,并更新地址* d$ ~. a6 m* ^$ w/ V8 Z
CMP     R2,#0          ;检测R2是否等于0
$ [. U5 f4 w7 T2 H/ XBNE     strcopy         ;若条件不成立,则继续执行2 Q8 j' C' k. ^, l, y  {
MOV    PC,LR            ;从子程序返回5 X$ P9 N1 h4 _; w
END
作者: yhg-lee    时间: 2016-7-13 15:03
看贴学心得,回贴是美德. |) L' K7 O  U% x4 T# X

作者: sinsaina    时间: 2016-7-14 15:00
感谢楼主分享!!!' @! F* e  d& k% b  A! c9 U

作者: Dedy01    时间: 2016-7-18 19:05
路过捧场,谢谢分享!3 t# w* k$ z2 q6 T





欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2