|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。0 ~8 v3 V: L; S+ M3 {/ d! R
C语言程序调用汇编语言程序完成字符串拷贝。% U% s0 [+ E, H0 t7 F% U& E
C语言源程序:/ I' s/ `: I& ^" A9 X
#include <stdio.h>
+ v8 h9 q7 Q1 N0 B# I3 [extern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数
- E' C8 R- _& r+ \* X ;可被其他文件中的函数调用: ?- t; F' ]0 Z! u9 e
int main, j% y1 i4 V5 S* d2 t! F1 T
{const char *srcstr="First string-source";
6 J5 M4 `' B3 P- Echar *dststr="Second string-destination";$ H# N% }8 n% T7 r5 ~/ v3 H
printf("Before copying:\n");* c5 L- z' N/ R- E* [1 f+ E
printf("%s\n%s\n",srcstr,dststr);
! C! s' g, X3 V3 V- k3 Pstrcopy(srcstr,dststr); ;调用汇编函数strcopy()
! s2 A- `9 a7 A% W7 X. W+ |3 R6 T# O+ Aprintf("After copying:\n");; A, D: g+ v# Q! X3 x. e
printf("%s\n%s\n",srcstr,dststr);2 W; B( D. l1 c" P. s
return(0);
( T* O7 U- h% v3 j}. X. F) H# x" g; F. \6 B
汇编语言源程序:
* x$ @- Z( [$ d, {AREA SCopy,CODE,READONLY, a- W7 _* i. a3 w b {9 e7 ~0 w
EXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引
. A, W9 E5 M6 c8 ^* j3 X0 O9 l ;用,相当于声明了一个全局变量
% z w. j6 _) Z+ {3 q& H; IStrcopy ;R0指向目标字符串,R1指向源字符串8 A: I) g: k" N C
LDRB R2,[R1],#1 ;字节加载,并更新地址
# l1 Z2 y4 w1 N! {" VSTRB R2,[R0],#1 ;字节保存,并更新地址
1 r D2 U' p$ M% N/ t3 }" hCMP R2,#0 ;检测R2是否等于0
: X5 r, R( o: f M2 CBNE strcopy ;若条件不成立,则继续执行5 K8 q* d9 n5 j5 u; B$ G; H# q
MOV PC,LR ;从子程序返回
! y/ T. `6 p% ZEND |
|