EDA365电子论坛网

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

作者: xuzwg    时间: 2016-8-11 14:11
标题: C语言程序调用汇编语言程序
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。
% A' `  r: [0 R$ t$ b: bC语言程序调用汇编语言程序完成字符串拷贝。
5 s. R/ l, b6 hC语言源程序:
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% Mchar *dststr="Second string-destination";+ i/ G( O/ ^) b  w1 \
printf("Before copying:\n");
( A5 [+ j3 m6 Fprintf("%s\n%s\n",srcstr,dststr);   
! V1 b) W& f* t$ y  `% @' a" K- rstrcopy(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 DEXPORT strcopy          ;用EXPORT伪操作声明该变量可被其他文件引( M3 s2 I2 e- ]6 F9 A! h, n& ?
                        ;用,相当于声明了一个全局变量
& l0 j' h1 W* Z- l8 m6 g2 tStrcopy                 ;R0指向目标字符串,R1指向源字符串
" x" O) d; {2 i1 ^0 ?" ]5 ILDRB    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! LMOV    PC,LR            ;从子程序返回
: Q" Q! \9 ^7 D5 \/ E0 SEND
作者: 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