- 1、本文档共176页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《ARM9编程C语言程序设计》.ppt
第4章 ARM编程技术 硅谷芯微 技术贡献 网址:www.threeway.cc ARM处理器支持两种语言进行设计,一种是汇编语言(ARM/Thumb),另一种是高级语言(如C/C++语言)。汇编语言的机器代码生成效率很高,但可读性却不强,复杂的程序很难读懂;而高级语言在大多数情况下其机器代码生成效率较差,但可读性和可移植性却比汇编语言强很多,而且还可以嵌入汇编来解决高效性的代码编写问题。 本章的内容主要有: ■ 汇编语言编程技术; ■ C语言编程技术; ■ 汇编语言与C/C++语言的混合编程。 4.1 汇编语言 4.2 C语言程序设计 4.3汇编语言与C/C++语言的混合编程 4.4 ARM编程实战 4.5 课后练习(1) 4.5 课后练习(2) 4.5 课后练习(3) 4.5 课后练习(4) 谢谢大家 硅谷芯微 技术贡献 4.4.2 实战2(4) 程序清单4.9 汇编语言冒泡排序算法 4.4.3 实战3 实战3 初始化处理器各个模式下的堆栈。 提示:ARM处理器能够工作在7种模式下。不管在哪种模式下工作,处理器运行程序时,无可避免地要使用到堆栈,所以正确设置各个模式下的堆栈,能够保证程序正确执行。 程序清单4.10 初始化各个处理器模式下的堆栈 程序清单4.10 初始化各个处理器模式下的堆栈 内嵌汇编指令的应用举例(1) 本小节通过一个例子帮助读者理解内嵌汇编指令的用法。本例介绍如何利用内嵌的汇编指令实现使能中断和禁止中断。使能和禁止中断IRQ是通过修改CPSR寄存器中的位7完成的。因为用C语言无法修改寄存器CPSR的值,所以这些操作必须借助汇编语句完成。 例34 使能/禁止中断采用内嵌汇编指令来实现。 内嵌汇编指令的应用举例(2) 例34 使能/禁止中断采用内嵌汇编指令来实现。 内嵌汇编注意事项(1) 后缀.S文件中的汇编指令是用armasm汇编器进行汇编的,而C语言程序中的内嵌汇编指令则是用内嵌汇编器进行汇编的。这两种汇编器存在一定的差异,所以在内嵌汇编时要注意以下几点: (1)必须小心使用物理寄存器,如R0~R3、IP(R12)、LR(R14)和CPSR中的N、Z、C、V标志位。因为计算汇编代码中的C表达式时,可能使用这些物理寄存器,并会修改N、Z、C、V标志位。 例35 实现y = x+x/y。 内嵌汇编注意事项(2) 在计算x/y时R0会被修改,从而影响R0+x/y的结果。内嵌汇编程序中允许使用变量,用变量来代替寄存器R0可以解决上述问题。 这时内嵌汇编器将会为变量var分配合适的存储单元,从而避免冲突的发生。如果内嵌汇编器不能分配合适的存储单元,它将会报告错误。 内嵌汇编注意事项(3) (2)不要使用寄存器代替变量。尽管有时寄存器明显对应某个变量,但也不能直接使用寄存器代替变量。 例36 实现对x加1的操作。 尽管根据编译器的编译规则可以确定R0对应x,但这样的代码会使内嵌汇编器认为发生了寄存器冲突。当调用INC_f(x)函数时,编译器会用其他寄存器代替R0存放参数x,使得该函数将x 原封不动地返回。这段代码的正确写法如下: 内嵌汇编注意事项(4) (3)对于在内嵌汇编语言程序中用到的寄存器,编译器在编译时会自动保存和恢复这些寄存器,用户不用保存和恢复这些寄存器。除了CPSR和SPSR寄存器外,其他物理寄存器在读之前必须先赋值,否则编译器会报错。 例37 错误地保护物理寄存器R0。 内嵌汇编注意事项(5) 例37 错误地保护物理寄存器R0。 上述例子中,第1条指令在没有给寄存器R0赋值时就对R0进行操作,这是错误的;而最后一条指令恢复寄存器R0的值,也是没必要的。 内嵌汇编注意事项(6) (4)在汇编指令中,逗号“,”用作分隔符。因此如果指令中的C表达式中包含逗号“,”,则该表达式应该包含在括号中。 例38 使用括号。 4.3.2 汇编与C/C++程序的变量相互访问 在一个工程中,一般都会由多个汇编文件和多个C/C++程序文件有机组成。在这些汇编文件和C/C++文件之间就存在变量相互访问和函数相互调用的问题。4.3.3小节将会讲述函数相互调用的问题,本小节主要讨论汇编文件和C/C++文件间变量相互访问的问题,其中包括两部分: ■ 汇编程序访问C/C++程序变量。 ■ C/C++程序访问汇编程序数据。 汇编程序中访问C/C++ 程序变量(1) 在C/C++程序中声明的
您可能关注的文档
最近下载
- 津津有味·读经典Level3《威尼斯商人》译文和答案.docx
- (正式版)G-B 5135.10-2006 自动喷水灭火系统 第10部分:压力开关.docx VIP
- 2023年胆总管结石的治疗指南.pptx
- GB 50788-2012 城镇给水排水技术规范.docx VIP
- (正式版)G-B 5135.6-2018 自动喷水灭火系统 第6部分:通用阀门.docx VIP
- 上海市六年级(下)数学同步讲义 第9讲 一元一次方程的应用.doc VIP
- (正式版)-B 5135.5-2018 自动喷水灭火系统 第5部分:雨淋报警阀.docx VIP
- 《烟草秸秆生物有机肥生产技术指南》编制说明.pdf VIP
- 安全风险隐患排查表(国家隐患排查导则版)(1).xlsx VIP
- DB34_T 3448-2019装卸软管定期检验规程.docx
文档评论(0)