|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为了使用单独编译的C语言程序和汇编程序能够互相调用,定义了统一的函数过程调用标准ATPCS。ATPCS定义了寄存器组中的{R0~R3}作为参数传递和结果返回寄存器。如果参数数目超过4个,则使用堆栈进行传递。由于内部寄存器的访问速度远远大于存储器,所以要尽量使参数传递在寄存器里面进行,即应尽量把函数的参数控制在4个以下。
y# |2 `9 Y* S: d* D示例 汇编函数调用的参数传递。
' G5 ?# C) d* ~4 x# h/ R从C语言中直接调用汇编语言函数, q) ?+ P" z7 w0 P" S) l! c
extern void strcopy(char *d,const char *s);2 e+ u# U; I, ]" d# B P- R
int main(void){* B* x- f& L, h- H# m3 S
const char src="Source";. E8 d: s% z" |' B3 o8 g7 _
char dest[10];
9 P& M6 l/ T' p...
, e, z: t5 P! Ystrcopy(dest,src);
" g- Y, O+ G G" o...1 h, _7 t2 B0 A$ U7 h* @
}0 v* p) [2 N- O' v {( }4 j
AREA StrCopy,CODE,READONLY2 C0 r, w" G4 R
EXPORT strcopy
: U# F( C/ \! n% s8 Istrcopy
! n y! V! R$ Q; o v; C& S1 T) SLDRB R2,[R1],#1
( G# `3 k# j! ISTRB R2,[R0],#1/ ]! m7 u' j& j5 r
CMP R2,#0
3 {6 R7 w2 u. n/ M5 } _BNE strcopy& g3 ?9 D. `- B9 \, b6 P1 f
MOV PC,LR
' n( N: T8 a( a8 OEND
0 K v( y3 J8 i/ p5 E0 y这个例子中的函数strcopy用汇编来实现,根据ATPCS的定义,函数参数从左到右由寄存器进行传递,所以在汇编中直接由R0和R1进行引用。这样,在C语言和汇编语言之间进行调用就容易实现了。 |
|