全球旧事资料 分类
结果。首先建立汇编源文件startsNistartsIMPORTFactorialEQU20AREAFctrlCODEREADONLYENTRY声明Factorial是一个外部函数要计算的阶乘数声明代码Fctrl标识程序入口将参数装入R0调用Factorial,并通过R0传递
startMOVR0NiBLFactorial参数注:在此处观察结果StopBStopEND然后建立C语言源文件factorialcfactorialclo
glo
gFactorialcharNcharilo
glo
gNx1fori1iNiNxNxiretur
Nx程序运行结果如下:程序运行结果如下:R00x82B40000R10x21C3677C
文件结束
通过R0,R1返回结果
嵌入式C语言调用ARM汇编语言(C程序调用汇编程序)201004151456C程序调用汇编程序也要特别注意参数的传递规则,程序设计时要严格遵守ATPCS。在GNUARM编译环境下,在汇编程序中要使用global伪操作声明汇编程序为全局的函数,可被外部函数调用,同时在C程序中要用关键字exter
声明要调用的汇编语言程序。在ARM开发工具编译环境下,汇编程序中要使用EXPORT伪操作声明本程序可以被其他程序调用。同时也要在C程序中要用关键字exter
声明要调用的汇编语言程序。示例解析(1)在GNUARM编译环境下设计程序,用用C语言调用ARM汇编语言C语言实现20的
f阶乘(20!)操作,并将64位结果保存到0xFFFFFFF0开始的内存地址单元,按照小端格式低位数据存放在低地址单元。每一步:建立启动C程序的代码,请读者参阅前面的章节自行建立。每二步:建立C语言源文件mai
cmai
cexter
voidFactorialcharNx声明Factorial是一个外部函数Mai
charN20FactorialN调用汇编文件实现N操作注:在此处观察结果while1每三步:建立汇编源文件FactorialsFactorialsglobalFactorial函数FactorialMOVR8R0MOVR90SUBR0R81LoopMOVR1R9UMULLR8R9R0R8MLAR9R1R0R9SUBSR0R01BNELoopLDRR00xFFFFFFF0STMIAR0R8R9的内存单元MOVPCLR声明Factorial为一个全局
取参数高位初始化初始化计数器暂存高位值R9R8R0R8R9R1R0R9计数器递减计数器不为0继续循环结果保存到0xFFFFFFF0开始子程序返回
(2)ARM开发工具编译环境下设计程序,C语言调用ARM汇编语言实现20的阶乘在用(20!)操作,并将64位结果保存到0xFFFFFFF0开始的内存地址单元,按照小端格式低位数据存放在低地址单元。每一步:建立启动C程序的代码,请读者参阅前面的章节自行建立。每二步:建立C语言源文件mai
c,与GNUARM编译环境下相同。mai
cexter
voidFactorialcharNx声明Factorial是一个外部函数__mai
charN20FactorialN调用汇编文件r
好听全球资料 返回顶部