欢迎来到天天文库
浏览记录
ID:15589067
大小:44.50 KB
页数:5页
时间:2018-08-04
《arm汇编语言与嵌入式c语言混合编程————内嵌汇编》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ARM汇编语言与嵌入式C语言混合编程————内嵌汇编在嵌入式程序设计中,有些场合(如对具体的硬件资源进行访问)必须用汇编语言来实现,可以采用在嵌入式C语言程序中嵌入汇编语言或嵌入式C语言调用汇编语言来实现。内嵌汇编内嵌的汇编指令与通常的ARM指令有所区别,是在嵌入式C程序中嵌入一段汇编代码,这段汇编代码在形式上表现为独立定义的函数体,遵循过程调用标准。1.语法格式在嵌入式C程序中内嵌汇编使用关键字“__asm”。在ARM开发工具编译环境下与GNUARM编译环境下的内嵌汇编在格式上略有差别。(1)ARM开发工具编译环境下内嵌汇编语法格式在ARM开
2、发工具编译环境下的内嵌汇编语言程序段,可以直接引用C语言中的变量定义。具本的语法格式如下:__asm{指令;[指令]指令;[指令]//注释…[指令]}示例:/*main.c*/void__main(void){intvar=0xAA;__asm//内嵌汇编标识{MOVR1,varCMPR1,#0xAA}while(1);}(2)GNUARM环境下内嵌汇编语法格式在GNUARM编译环境下内嵌汇编语言程序段,不能直接引用C语言中的变量定义。如果有多条汇编指令需要嵌入,则可用“”将它们归为一条语句。具本的语法格式如下:__asm(“指令;[指令;]
3、指令;[指令;]…[指令;]”);示例:/*main.c*/void__main(void){intvar=0xAA;__asm("MOVR5,#0xAA;/*注意:这里不要直接使用C代码中提供的变量*/MOVR6,#0xBB;CMPR1,#0;");while(1);}ARM汇编语言调用嵌入式C语言(汇编程序调用C程序)2010-04-1514:50这里要特别注意参数的传递规则,程序设计时要严格遵守ATPCS。在GNUARM编译环境下,汇编程序中要使用.extern伪操作声明将要调用的C程序;在ARM—ADS开发工具编译环境下,汇编
4、程序中要使用IMPORT伪操作声明将要调用的C程序。示例解析(1)在GNUARM编译环境下设计程序,用ARM汇编语言调用C语言实现20!的阶乘操作,并将64位结果保存到寄存器R0、R1中,其中R1中存放高32位结果。首先建立汇编源文件start.s/*start.s*/.global_start.externFactorial@声明Factorial是一个外部函数.equNi,20@要计算的阶乘数.text_start:MOVR0,#Ni@将参数装入R0BLFactorial@调用Factorial,并通过R0传递参数Stop:BStop.en
5、d然后建立C语言源文件factorial.c/*factorial.c*/longlongFactorial(charN){chari;longlongNx=1;for(i=1;i<=N;i++)Nx=Nx*i;returnNx;//通过R0,R1返回结果}(2)在ARM—ADS开发工具编译环境下设计程序,用ARM汇编语言调用C语言实现20!的阶乘操作,并将64位结果保存到寄存器R0、R1中,其中R1中存放高32位结果。首先建立汇编源文件start.s/*start.s*/IMPORTFactorial;声明Factorial是一个外部函数Ni
6、EQU20;要计算的阶乘数AREAFctrl,CODE,READONLY;声明代码FctrlENTRY;标识程序入口startMOVR0,#Ni;将参数装入R0BLFactorial;调用Factorial,并通过R0传递参数/*注:在此处观察结果*/StopBStopEND;文件结束然后建立C语言源文件factorial.c/*factorial.c*/longlongFactorial(charN){chari;longlongNx=1;for(i=1;i<=N;i++)Nx=Nx*i;returnNx;//通过R0,R1返回结果}程序运行
7、结果如下:R0=0x82B40000R1=0x21C3677C嵌入式C语言调用ARM汇编语言(C程序调用汇编程序)2010-04-1514:56C程序调用汇编程序也要特别注意参数的传递规则,程序设计时要严格遵守ATPCS。在GNUARM编译环境下,在汇编程序中要使用.global伪操作声明汇编程序为全局的函数,可被外部函数调用,同时在C程序中要用关键字extern声明要调用的汇编语言程序。在ARM开发工具编译环境下,汇编程序中要使用EXPORT伪操作声明本程序可以被其他程序调用。同时也要在C程序中要用关键字extern声明要调用的汇编语言程序。
8、示例解析(1)在GNUARM编译环境下设计程序,用用C语言调用ARM汇编语言C语言实现20的阶乘(20!)操作,并将64位结果保存到0xFFFFFFF
此文档下载收益归作者所有