: .
〈〈嵌入式系统技术》实训报告
学期:日期:实训场所:
二级学院
信息工程学院
班级
R0和R返回,依次类推。
* 结果为一个浮点数时,可以通过浮点运算部件的寄存器f0、d0或者S0来返回。
* 结果为复合型的浮点数(如复数)时,可以通过寄存器f0〜fN或者d0〜dM返回。
-对于位数更多的结果,需要通过内存来传递。
C语言函数和ARM汇编语言函数间相互调用局级语言函数与汇编语言函数的混合调用也要遵循ATPC酗则保证程序调用时参数的正确传递。在汇编程序中使用EXPORT伪指令声明本子程序,使其它程序可以调用此子程序,而在C语言程序中使用extern关键字声明外部函数(声明要调用的汇编子程序),即可调用此汇编子程序。下面给出两个例子来介绍函数相互调用。
例C函数中调用汇编
示例中汇编子程序strcopy使用两个参数,一个表示目标字符串地址,一个表示源字符串的地址,参数分别存放R0,R1寄存器中。
#include<>
externvoidstrcopy(char*d,constchar*s)//声明外部函数。即要调用的汇编子程序intmian(void){constchar*srcstr="Firststring-source";〃定义字符串常量chardstsrt[]="Secondstring-destination";〃定义字符串变量printf("Beforecopying:/n");printf("'%s'\n'%s/n,"srcstr,dststr);〃显示源字符串和目标字符串的内容strcopy(dststr,srcstr);〃调用汇编子程序,R0=dststr,R1=srcstrprintf("Aftercopying:\n")
printf("'%s'\n'%s\n,"srcstr,dststr);〃显示strcopy复制字符串结果return(0);}被调用汇编子程序:
AREASCopy,CODE,READONLYEXPORTstrcopy;声明strcopy,以便外部程序引用strcopy;R0为目标字符串的地址;R1为源字符串的地址LDRBR2,[R1],#1
STRBR2,[R0],#1
CMPr2,#0
;读取字节数据,源地址加l
;保存读取的1字节数据,目标地址加1
;判断字符串是否复制完
BNEstrcopy;没有复制完毕,继续循环
MOVpc,1r;返回
END
例汇编程序调用C程序
汇编程序的设置要遵循ATPCS规则,保证程序调用时参数的正确传递。在汇编程序
中使用IMPORT伪指令声明将要调用的C程序函数。在调用C程序时,要正确设置入口参数,然后使用BL调用。示例程序中使用了5个参数,分别使用寄存器R0存储第1个参数,R1存储第2个数,R2存储第3个参数,R3存储第4个参数,第5个参数利用堆栈传送。由于利用了堆栈传递参数,在程序调用结果后要调整堆栈指针。
汇编调用C程序的汇编程序
/*函数sum()返回5个整数的和*/
intsum(inta,litb,intc,intd,inte)
{re
嵌入式系统实训报告5 来自淘豆网m.daumloan.com转载请标明出处.