第八次课 汇编语言和c的混合编程.ppt

第八次课 汇编语言和c的混合编程.ppt

ID:48744305

大小:81.00 KB

页数:19页

时间:2020-01-21

第八次课 汇编语言和c的混合编程.ppt_第1页
第八次课 汇编语言和c的混合编程.ppt_第2页
第八次课 汇编语言和c的混合编程.ppt_第3页
第八次课 汇编语言和c的混合编程.ppt_第4页
第八次课 汇编语言和c的混合编程.ppt_第5页
资源描述:

《第八次课 汇编语言和c的混合编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、汇编与c的混合编程在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,因为C语言的结构比较好,便于人的理解,而且有大量的支持库。汇编语言,例如开机时硬件系统的初始化,包括CPU状态的设定,中断的使能,主频的设定,以及RAM的控制参数及初始化,一些中断处理方面也可能涉及汇编。C和汇编的混合编程在c中嵌入汇编指令在汇编程序和c程序之间进行变量的互访在汇编程序,c程序之间的相互调用1.在C语言中内嵌汇编在C中内嵌的汇编指令包含大部分的ARM和Thumb指令,存在一些限制,主要有下面几个方面:不能直接向PC寄存器赋值,

2、程序跳转要使用B或者BL指令在使用物理寄存器时,不要使用过于复杂的C表达式,避免物理寄存器冲突R12和R13可能被编译器用来存放中间编译结果,计算表达式值时可能将R0到R3、R12及R14用于子程序调用,因此要避免直接使用这些物理寄存器内嵌汇编使用的标记是__asm,用法如下:__asm{instruction[;instruction]…[instruction]}voidenable_IRQ(void){inttmp;__asm{MRStmp,CPSRBICtmp,tmp,#80MSRCPSR_c,tmp}}voiddisable_IRQ(void){inttmp;__asm

3、{MRStmp,CPSRORRtmp,tmp,#80MSRCPSR_c,tmp}}80=0x50=0b1010000#includevoidmy_strcpy(constchar*src,char*dest){charch;__asm{loop:ldrb       ch,[src],#1strb       ch,[dest],#1cmp        ch,#0bne         loop}}intmain(){char*a="forgetitandmoveon!";charb[64];my_strcpy(a,b);printf("original:%s

4、",a);printf("copyed:   %s",b);return0;}内存用户数据区变量i变量j变量i_pointer362000200020023010在程序中定义一个变量,在编译时就给这个变量分配一个内存单元,同时根据变量的类型决定这个内存单元的大小。如:整型2字节,实型4字节。内存中每一个字节都有一个编号,就是“地址”。对每一个变量,它在内存中都有一个存储位置,这个位置就是该变量的地址,对变量值的存取是通过地址进行。在C语言中这个地址被形象化地称为“指针”。指针:一个变量的地址。指针变量:存放地址的变量.定义一个指针变量指针变量在使用前必须定义,使其指向特定类型的变

5、量,指针变量存放地址,必须定义为“指针类型”。定义的一般形式:基类型*指针变量名;基类型:用来指定指针变量可以指向的变量的类型。将决定指针移动和运算时的移动量。构成:[存储类型]数据类型*:表示该变量为指针类型注意:1、指针变量名是p1,p2,不是*p1,*p22、指针变量只能指向定义时所规定类型的变量3、指针变量定义后,变量值不确定,应用前必须先赋值2.在汇编中使用C定义的全局变量汇编通过地址访问c的全局变量访问方法:使用INPORT/EXTERN伪操作引用该全局变量使用LDR伪指令读取全局变量的地址使用LDR指令读取全局变量使用STR指令存储该全局变量范例:globvar的地

6、址载入R1,将该地址中包含的值载入R0,并与2相加,结果保存在globvar中.PRESERVE8AREAglobals,CODE,READONLYEXPORTasmsubroutineIMPORTglobvar;引入全局变量globvarasmsubroutineLDRR1,=globvarLDRR0,[R1]ADDR0,R0,#2STRR0,[R1]MOVpc,lrEND2.在汇编中使用C定义的全局变量#includeintgVar_1=12;externasmDouble(void);intmain(){printf("originalvalueofgVa

7、r_1is:%d",gVar_1);asmDouble();printf("modifiedvalueofgVar_1is:%d",gVar_1);return0;}AREAasmfile,CODE,READONLYEXPORTasmDoubleIMPORTgVar_1asmDoubleldrr0,=gVar_1ldrr1,[r0]movr2,#2mulr3,r1,r2strr3,[r0]movpc,lrEND2.在c中访问汇编的程序数据访问方法:在汇编中用EXPORT/GLOB

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。