汇编语言与CC++的混合编程ARM处理器编程分析.ppt

汇编语言与CC++的混合编程ARM处理器编程分析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入汇编程序举例 使能IRQ 中断: __inline void enable_IRQ(void) { int tmp __asm //嵌入汇编代码 { MRS tmp,CPSR //读取CPSR 的值 BIC tmp,tmp,#0x80 //将IRQ 中断禁止位I 清零,即允许IRQ 中断 MSR CPSR_c,tmp //设置CPSR 的值,“_c”表示控制域即[7:0]位 } } 嵌入汇编程序举例 禁止IRQ 中断: __inline void disable_IRQ(void) { int tmp; __asm { MRS tmp,CPSR ORR tmp,tmp,#0x80 MSR CPSR_c,tmp } } 本节描述如何在C++代码中使用C头文件。从C++调用C头文件之前,C头文件必须包含在externC命令中。本节包含以下两部分内容: (1)在C++中使用系统的C头文件; (2)在C++中使用自定义的C头文件。 3. C++中使用C头文件 要包括标准的系统 C 头文件,如 stdio.h,不必进行任何特殊操作,由编译器自动包含标准 C 头文件。 1.在C++中使用系统C头文件 要包含自己的C头文件,用户必须将#include命令包在extern C语句中。 2.在C++中使用自定义的C头文件 汇编程序、C程序及C++程序相互调用时,要特别注意遵守相应的AAPCS。下面一些例子具体说明了在这些混合调用中应注意遵守的AAPCS规则。 3. 混合编程调用举例 ARM汇编程序设计 //c程序g()返回5个整数的和 int g(int a, int b, int c, int d, int e) { return a + b + c + d + e; } ;汇编程序调用c程序g()计算5个整数i, 2*i, 3*i, 4*i, 5*i的和 EXPORT f AREA f, CODE, READONLY IMPORT g ;使用伪操作数IMPORT声明c程序g() STR lr, [sp,#-4]! ;保存返回地址 ADD r1, r0, r0 ;假设进入程序f时,r0中的值为i,r1值设为2*i ADD r2, r1, r0 ;r2的值设为3*i ADD r3, r1, r2 ;r3的值设为5*i STR r3, [sp, #-4]! ;第五个参数5*i通过数据栈传递 ADD r3, r1, r1 ;r4值设为4*i BL g ;调用c程序g() ADD sp, sp, #4 ;调整数据栈指针,准备返回 LDR pc, [sp], #4 ;返回 END 汇编程序中调用C (1) 汇编源文件asmfile.s: AREA asmfile,CODE,READONLY IMPORT cFun ENTRY mov r0,#0 mov r1,#1 mov r2,#2 bl cFun END C源文件cfile.c: int cFun(int a,int b,int c) { return a+b+c; } C程序调用汇编程序—C程序 #include stdio.h extern void asm_strcpy(const char *src,char *dst) int main() { const char *ts=“Hello world!”; char d[32]; asm_strcpy(ts,d); printf(“source:%s”,ts); printf(“destination:%s”,d); return 0; } C程序调用汇编程序—汇编程序 AREA asmfile,CODE,READONLY ENTRY EXPORT asm_strcpy loop ldrb r4,[r0],#1 cmp r4,#0 beq over strb r4,[r1],#1 b loop Over mov pc,lr END 基于ARM的C语言与汇编语言混合编程举例 下面给出了一个向串口不断发送0x55的例子: 该工程的启动代码使用汇编语言编写,向串口发送数据使用C语言实现,下面是启动代码的整体框架: …… IMPORT Main AREA Init,CODE,READONLY; ENTRY …… BL Main ;跳转到Main()函数处的C/C++程序 …… END ;标识汇编程序结束 下面是使用C语

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档