|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了保证程序调用时参数的正确传递,汇编语言程序的设计要遵守ATPCS。在汇编语言程序中使用EXPORT伪操作来声明,使得本程序可被其他程序调用。同时,在C语言程序调用该汇编语言程序之前,需要在C语言程序使用extern关键词来声明该汇编语言程序。在示例中,汇编语言程序strcopy完成字符串复制功能,C语言程序调用strcopy完成字符串的复制工作。
( q" t" ?: V1 Q eC语言程序调用汇编语言程序完成字符串拷贝。5 Q; }) E+ A" T: V
C语言源程序:
* `( b4 }4 }+ q( F$ P! ^. c) h#include <stdio.h>" X6 K2 T+ M% Z* [8 [4 k) J& ?& ^
extern void strcopy(char *d,const char *s) ;用extern声明一个函数为外部函数
" A9 P" o. r/ L ;可被其他文件中的函数调用' ]/ _* K: L; G0 y! p! e% B/ o
int main
; T8 h% t/ \2 @1 j{const char *srcstr="First string-source";3 _% [) c" Z& Y# V Y. h% r
char *dststr="Second string-destination";3 x l4 O1 b( ]* O1 _
printf("Before copying:\n");
J+ I* G; p5 l2 e* Z4 t- Y) Dprintf("%s\n%s\n",srcstr,dststr);
: d* V! [$ g! s2 n( `% S( E) n/ Wstrcopy(srcstr,dststr); ;调用汇编函数strcopy(): ]# I" U+ S6 Z6 y2 ^
printf("After copying:\n");
# P+ |' E% W) |3 `7 b( Z% yprintf("%s\n%s\n",srcstr,dststr);
2 g4 L! \# s; v9 \- `return(0);, v1 {! B% W h! |+ f3 c' _' f
}
* J1 J; V3 H9 n! E& m! ~0 Y汇编语言源程序:3 |1 j( }4 z) m" m% ^5 }
AREA SCopy,CODE,READONLY9 I8 o; B7 F. R1 @' i) j5 j7 B( C
EXPORT strcopy ;用EXPORT伪操作声明该变量可被其他文件引
9 y7 P8 x+ _1 q% s6 B; M ;用,相当于声明了一个全局变量5 {* j1 y% B9 V' Q8 f! T
Strcopy ;R0指向目标字符串,R1指向源字符串3 F8 M1 c( ^ Y! ~
LDRB R2,[R1],#1 ;字节加载,并更新地址, d; e8 q) W2 P
STRB R2,[R0],#1 ;字节保存,并更新地址
0 J; Y+ G0 p0 wCMP R2,#0 ;检测R2是否等于0! \6 F+ J) b w
BNE strcopy ;若条件不成立,则继续执行, b8 W4 X6 ^; F/ f; ]# Z
MOV PC,LR ;从子程序返回 L; }# Z7 h; H
END |
|