汇编语言和C语言的混合编程.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编与c的混合编程 在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,因为C语言的结构比较好,便于人的理解,而且有大量的支持库。 汇编语言,例如开机时硬件系统的初始化,包括CPU状态的设定,中断的使能,主频的设定,以及RAM的控制参数及初始化,一些中断处理方面也可能涉及汇编。 C和汇编的混合编程 ? 在c中嵌入汇编指令 ? 在汇编程序和c程序之间进行变量的互访 在汇编程序,c程序之间的相互调用 1.?在C语言中内嵌汇编 在C中内嵌的汇编指令包含大部分的ARM和Thumb指令,存在一些限制,主要有下面几个方面: 不能直接向PC寄存器赋值,程序跳转要使用B或者BL指令 ? 在使用物理寄存器时,不要使用过于复杂的C表达式,避免物理寄存器冲突 R12和R13可能被编译器用来存放中间编译结果,计算表达式值时可能将R0到R3、R12及R14用于子程序调用,因此要避免直接使用这些物理寄存器 内嵌汇编使用的标记是?__asm,用法如下: __asm { ???????instruction [;??instruction] ???????… ???????[instruction] } void enable_IRQ(void) { int tmp; __asm { MRS tmp,CPSR BIC tmp,tmp, #80 MSR CPSR_c,tmp } } void disable_IRQ(void) { int tmp; __asm { MRS tmp,CPSR ORR tmp,tmp, #80 MSR CPSR_c,tmp } } 80=0x50=0b1010000 #include stdio.h void my_strcpy(const char *src, char *dest) { ???????char ch;??? ???????__asm ???????{ ???????????loop: ???????????ldrb???????ch, [src], #1 ???????????strb???????ch, [dest], #1 ???????????cmp????????ch, #0 ???????????bne?????????loop ???????} } int main() { ??????char *a = forget it and move on!; ??????char b[64]; ???? my_strcpy(a, b); ??????printf(original: %s, a); ??????printf(copyed:???%s, b);?? ???????return 0; } 内存用户数据区 变量 i 变量 j 变量 i_pointer 3 6 2000 2000 2002 3010 在程序中定义一个变量,在编译时就给 这个变量分配一个内存单元,同时根据 变量的类型决定这个内存单元的大小。 如:整型2字节,实型4字节。 内存中每一个字节都有一个编号, 就是“地址”。 对每一个变量,它在内存中都有一个 存储位置,这个位置就是该变量的地址, 对变量值的存取是通过地址进行。 在C语言中这个地址被形象化地称为“指针”。 指针:一个变量的地址。 指针变量:存放地址的变量. 定义一个指针变量 指针变量在使用前必须定义,使其指向特定类型的变量,指针变量存放地址,必须定义为“指针类型”。 定义的一般形式:基类型 *指针变量名; 基类型:用来指定指针变量可以指向的变量的类型。 将决定指针移动和运算时的移动量。 构成:[存储类型] 数据类型 * :表示该变量为指针类型 注意: 1、指针变量名是p1,p2 ,不是*p1,*p2 2、指针变量只能指向定义时所规定类型的变量 3、指针变量定义后,变量值不确定,应用前必须先赋值 2.?在汇编中使用C定义的全局变量 汇编通过地址访问c的全局变量 访问方法: 使用INPORT/EXTERN伪操作引用该全局变量 使用LDR伪指令读取全局变量的地址 使用LDR指令读取全局变量 使用STR指令存储该全局变量 范例:globvar的地址载入R1,将该地址中包含的值载入R0,并与2相加,结果保存在globvar中. PRESERVE8 AREA globals,CODE,READONLY

文档评论(0)

smdh + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档