EDA365电子论坛网
标题:
C语言程序调用汇编语言程序
[打印本页]
作者:
xuzwg
时间:
2016-8-11 14:11
标题:
C语言程序调用汇编语言程序
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。
% A' ` r: [0 R$ t$ b: b
C语言程序调用汇编语言程序完成字符串拷贝。
5 s. R/ l, b6 h
C语言源程序:
0 g6 [! A6 V! N/ E5 d1 z; l
#include <stdio.h>
5 b3 h3 [% ]8 V# d" c
extern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数
) |/ q3 O6 b5 `. n% B( u: A& J9 z
;可被其他文件中的函数调用
) m3 K. o4 d5 X. i& g0 e/ ?
int main
: d* p* b9 q+ q6 A7 s
{const char *srcstr="First string-source";
4 X2 X p8 m0 N& G4 ~5 R% M
char *dststr="Second string-destination";
+ i/ G( O/ ^) b w1 \
printf("Before copying:\n");
( A5 [+ j3 m6 F
printf("%s\n%s\n",srcstr,dststr);
! V1 b) W& f* t$ y `% @' a" K- r
strcopy(srcstr,dststr); ;调用汇编函数strcopy()
, H. I. e% p) }5 ^4 o
printf("After copying:\n");
1 x1 L, N5 ^' ^: `
printf("%s\n%s\n",srcstr,dststr);
6 Z2 a5 R: k6 U& c
return(0);
' \" N, z2 M a2 |4 O5 q: C( c1 W: \" z
}
* G" Q5 ]3 U$ X; L, Q7 k; C
汇编语言源程序:
: j) M$ {4 z& d7 w
AREA SCopy,CODE,READONLY
5 {9 p6 l, j: |$ d0 s/ P1 D
EXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引
( M3 s2 I2 e- ]6 F9 A! h, n& ?
;用,相当于声明了一个全局变量
& l0 j' h1 W* Z- l8 m6 g2 t
Strcopy ;R0指向目标字符串,R1指向源字符串
" x" O) d; {2 i1 ^0 ?" ]5 I
LDRB R2,[R1],#1 ;字节加载,并更新地址
( z9 v' ?8 ~. {0 L( O0 S
STRB R2,[R0],#1 ;字节保存,并更新地址
' W/ G4 W5 ^3 q# R. ? T. M
CMP R2,#0 ;检测R2是否等于0
( W# x$ `9 c# p( [4 ~
BNE strcopy ;若条件不成立,则继续执行
& |1 V- w- O4 _: f! L
MOV PC,LR ;从子程序返回
: Q" Q! \9 ^7 D5 \/ E0 S
END
作者:
10929390
时间:
2016-8-11 14:35
支持一下,很不错哦!
# u, H, B( z2 V/ y/ o: i
作者:
jerryli
时间:
2016-8-11 14:45
资源多,学习不止步,共同进步
B J4 Z& [4 {3 C+ `
作者:
ygcgsa
时间:
2016-8-12 10:56
谢谢楼主,一步步来,学习中……
c' c' U& o* r4 w% P4 C
作者:
sinsaina
时间:
2016-8-12 11:47
楼主辛苦了!
% |! P+ V e/ f/ t! O1 @
作者:
Abricy
时间:
2016-8-15 11:45
支持一下,很不错哦!
- e: T; M4 z2 c/ | ^0 L
作者:
Titianyeer
时间:
2016-8-16 10:13
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈
) N- p( J$ Q; h- M
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2