|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了使用单独编译的C语言程序和汇编程序能够互相调用,定义了统一的函数过程调用标准ATPCS。ATPCS定义了寄存器组中的{R0~R3}作为参数传递和结果返回寄存器。如果参数数目超过4个,则使用堆栈进行传递。由于内部寄存器的访问速度远远大于存储器,所以要尽量使参数传递在寄存器里面进行,即应尽量把函数的参数控制在4个以下。
- a0 O' i2 u* |/ |2 K: s/ q示例 汇编函数调用的参数传递。$ c" R; I5 c) J* O4 x
从C语言中直接调用汇编语言函数3 ^6 ^6 @& q4 l: l% A
extern void strcopy(char *d,const char *s);
4 R/ `4 D, G: C8 ~. j, k# M8 wint main(void){# k, w& Y- M' {
const char src="Source";
0 L5 M% c; O L3 g$ q9 E+ ychar dest[10];" o3 G5 T3 J( U }4 ~# V: A# {
...! e, |7 d, I4 L" d! K
strcopy(dest,src);" i3 V9 ]$ f9 D3 z2 M+ T$ h& q
...6 u# H. r' j# b
}
d5 j4 z4 ^/ Z, H2 zAREA StrCopy,CODE,READONLY
8 H; m" F5 w% L4 s2 b4 F8 BEXPORT strcopy& y/ A: r+ G f! ~% n
strcopy$ b; [! @$ i2 N1 v9 @
LDRB R2,[R1],#1
5 N8 w* n1 H6 q7 qSTRB R2,[R0],#1
9 ^$ `% W; d* gCMP R2,#0% N, b+ }0 ?( ? g9 ?3 S
BNE strcopy
3 ~( ]' F# B" LMOV PC,LR5 Q$ e% ~/ N: I* u" ^
END* [- U! L9 V8 X; y
这个例子中的函数strcopy用汇编来实现,根据ATPCS的定义,函数参数从左到右由寄存器进行传递,所以在汇编中直接由R0和R1进行引用。这样,在C语言和汇编语言之间进行调用就容易实现了。 |
|