|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了使用单独编译的C语言程序和汇编程序能够互相调用,定义了统一的函数过程调用标准ATPCS。ATPCS定义了寄存器组中的{R0~R3}作为参数传递和结果返回寄存器。如果参数数目超过4个,则使用堆栈进行传递。由于内部寄存器的访问速度远远大于存储器,所以要尽量使参数传递在寄存器里面进行,即应尽量把函数的参数控制在4个以下。
, S" ~3 |! ~/ f d示例 汇编函数调用的参数传递。4 q2 c# L+ C, C# M& A9 U' [
从C语言中直接调用汇编语言函数
# W! D4 [# p' pextern void strcopy(char *d,const char *s);) D! b6 A$ ^0 D5 q
int main(void){ F" S# `7 a$ N' e; G. n
const char src="Source";
6 t S3 s1 |2 m5 d; vchar dest[10];/ c1 b* q7 f6 w5 }" Q( x {. ]2 y
.... L4 g* X, h+ c
strcopy(dest,src);: W4 R$ k2 G' t# M6 l, w* G
...
2 s# I; R4 ^/ H! z' e9 f}
( }4 j* H' A2 u% NAREA StrCopy,CODE,READONLY
3 @; R! Y; @. f% m% Z1 ^EXPORT strcopy
5 k9 _, T# J3 w) r, K) Wstrcopy0 R0 f* w& k2 z0 l$ D
LDRB R2,[R1],#1" _) ^4 g, {) G/ F; I2 I# ?
STRB R2,[R0],#1
# |$ D- d9 |0 J7 _& j! Z4 aCMP R2,#0: V2 r9 o$ r7 c! h2 l5 K
BNE strcopy8 T8 k7 |* m. R# Q5 `+ m
MOV PC,LR
0 g% P; u( e" uEND" N' C5 K7 W+ P1 s4 O& L
这个例子中的函数strcopy用汇编来实现,根据ATPCS的定义,函数参数从左到右由寄存器进行传递,所以在汇编中直接由R0和R1进行引用。这样,在C语言和汇编语言之间进行调用就容易实现了。 |
|