|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了使用单独编译的C语言程序和汇编程序能够互相调用,定义了统一的函数过程调用标准ATPCS。ATPCS定义了寄存器组中的{R0~R3}作为参数传递和结果返回寄存器。如果参数数目超过4个,则使用堆栈进行传递。由于内部寄存器的访问速度远远大于存储器,所以要尽量使参数传递在寄存器里面进行,即应尽量把函数的参数控制在4个以下。
: ~3 Y" H `6 E1 A; O5 t% Y% q示例 汇编函数调用的参数传递。8 u/ o# P; U$ _! ]
从C语言中直接调用汇编语言函数# o$ v# E% s0 S- Y5 M
extern void strcopy(char *d,const char *s);
" ]1 }' C; @9 r5 Gint main(void){
0 c, s6 n2 Y7 A$ Xconst char src="Source";6 X/ X7 A6 q6 V' D" ]
char dest[10];( r9 l* ?3 l$ ~- N- W
...# ] T" D y* q3 S
strcopy(dest,src);
4 F+ q1 x9 G! ?* }. G...
' s. k6 v. O1 p8 t6 |}
! ^) t/ y1 Z j" W @0 UAREA StrCopy,CODE,READONLY) \$ b/ F2 q: Z
EXPORT strcopy
+ P6 l6 U; Z* s8 _. g A% B% T3 Pstrcopy) T1 [, W$ V" B# E" f8 D) k+ T
LDRB R2,[R1],#1
0 j4 ^1 a5 T2 }6 \" ?STRB R2,[R0],#1
$ t Y9 ^' A0 FCMP R2,#0) h; [0 Z# k/ ?8 J- B+ n
BNE strcopy
5 T& D& ? i0 R G% f/ J/ }6 ~MOV PC,LR9 m% e; e1 T- P9 c3 o8 G7 u) R
END) T% ^* p1 x. g+ q+ F
这个例子中的函数strcopy用汇编来实现,根据ATPCS的定义,函数参数从左到右由寄存器进行传递,所以在汇编中直接由R0和R1进行引用。这样,在C语言和汇编语言之间进行调用就容易实现了。 |
|