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% [) z
C语言源程序:
+ [: 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 main
1 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 K
printf("Before copying:\n");
9 w( o1 d8 Q. W! W: j0 f" b
printf("%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# i
EXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引
5 w% B, z3 Y8 n1 |5 C2 Y
;用,相当于声明了一个全局变量
, a4 r6 r; W6 \5 v3 l
Strcopy ;R0指向目标字符串,R1指向源字符串
2 d8 v* l- s" O& Y
LDRB 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/ X
BNE 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