|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了使用单独编译的C语言程序和汇编程序能够互相调用,定义了统一的函数过程调用标准ATPCS。ATPCS定义了寄存器组中的{R0~R3}作为参数传递和结果返回寄存器。如果参数数目超过4个,则使用堆栈进行传递。由于内部寄存器的访问速度远远大于存储器,所以要尽量使参数传递在寄存器里面进行,即应尽量把函数的参数控制在4个以下。& T- |6 `4 P. {1 h3 ?
示例 汇编函数调用的参数传递。0 V1 d& U/ ~( [' d" ?4 ^4 r7 k3 {' g
从C语言中直接调用汇编语言函数
; y0 E# y* _7 P2 j- a0 l0 nextern void strcopy(char *d,const char *s);
8 ], w9 }, M. g0 T! p* K; ]; pint main(void){, l1 d- u; g( k1 m
const char src="Source";. {& P0 X. [" d
char dest[10];9 e W! {: y @1 X# N
...; l2 v4 }( T( H3 l; F* w
strcopy(dest,src);
- b) f7 k8 ], R% P) q...
- \, ~3 w* x6 h) B2 m}, F. a& o! R- E! p9 [; i
AREA StrCopy,CODE,READONLY
$ o1 [: o7 i' a8 L- {EXPORT strcopy
t8 z( U4 L' }7 G3 Gstrcopy! Q- ~$ o* @" ~: T
LDRB R2,[R1],#1
) }9 M$ p1 n5 i( N1 ]1 Q+ t+ vSTRB R2,[R0],#1
! y. i! N* M+ r8 Z* CCMP R2,#0
2 Y; c/ f0 H k! {9 V+ f3 y6 H# e9 pBNE strcopy
) Z v' C" F0 R7 g& L5 ]" J1 ^# CMOV PC,LR- ]5 D/ q C* p; K5 j# u2 o
END
" w# o+ F7 r$ W这个例子中的函数strcopy用汇编来实现,根据ATPCS的定义,函数参数从左到右由寄存器进行传递,所以在汇编中直接由R0和R1进行引用。这样,在C语言和汇编语言之间进行调用就容易实现了。 |
|