- 1、本文档共42页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章
ARM汇编语言程序设计
在第2章中阐述的体系结构及指令集理论的基础上,本章主要介绍利用ARM汇编语言进行编程。ARM编译器可以支持汇编语言、C/C++、汇编语言与C/C++的混合编程等,本章将介绍相关的编程方法。
本章主要内容:
● ARM/Thumb混合编程
● ARM汇编器支持的伪操作
● ARM汇编器支持的伪指令
● ARM汇编器的使用
● 汇编语言与C/C++的混合编程
3.1 ARM/Thumb混合编程
3.1.1 Thumb指令的特点及实现
Thumb指令集把32位ARM指令集的一个子集编码为一个16位的指令集。在16位外部数据总线宽度下,ARM处理器上使用Thumb指令的性能要比使用ARM指令的性能更好;而在32位外部数据总线宽度下,使用Thumb指令的性能要比使用ARM指令的性能差。因此,Thumb指令多用于存储器受限的一些系统中。Thumb指令集并没有改变ARM系统底层的程序设计模型,只是在该模型上增加了一些限制条件。Thumb指令集中的数据处理指令的操作数仍然是32位,指令寻址地址也是32位的。
代码密度高是Thumb指令集的一个主要优势。对于同一个程序而言,使用Thumb指令实现所需的存储空间,要比等效的ARM指令实现少30%左右。例3-1和例3-2介绍的是使用ARM指令和Thumb指令实现相同的除法操作。从例子中可以看出,虽然Thumb指令的实现使用了更多的指令,但是它占用的总的存储空间却比较小。
【例3-1】 使用ARM指令实现除法运算。
MOV R3,#0
loop
SUB R0,R0,R1
ADDGE R3,R3,#1
BGE loop
ADD R2,R0,R1
R0存放被除数,R1存放除数,R2和R3分别存放余数和商。完成整个除法运算使用了5条指令,每一条指令所占的字节数为4,所以实现一个除法运算,ARM指令所占有的字节数为20。
【例3-2】 使用Thumb指令实现除法运算。
MOV R3,#0
loop
ADD R3,#1
SUB R0,R1
BGE loop
SUB R3,#1
ADD R2,R0,R1
例3-2使用Thumb指令完成了和例3-1完全相同的功能。Thumb指令虽然使用了6条指令,但其每条指令占用2个字节,所以总的字节数为6×2=12,小于ARM指令所占用的20个字节。
Thumb指令是ARM指令的一个受限子集。在Thumb状态下,不能直接访问所有的处理器寄存器,只有R0~R7是可以被任意访问的。在Thumb状态下,使用该8个寄存器和在ARM状态下使用没有区别。寄存器R8~R12只能通过MOV、ADD或CMP指令访问。CMP指令和所有操作R0~R7的数据处理指令都会影响CPSR中的条件标志位。一些Thumb指令还使用到了程序计数器PC(R15)、链接地址寄存器LR(R14)和堆栈指针寄存器SP(R13)。在Thumb状态下,读取R15寄存器时,bit[0]值为0,bits [31:1]包含了PC的值。当对R15进行写入时,bit[0]被忽略,bits[31:1]被设置成当前程序计数器的值。
表3-1列出了在Thumb状态下,各个寄存器的使用情况。
表3-1 Thumb寄存器的使用
寄 存 器 访 问 R0~R7 完全访问 R8~R12 只能通过MOV、ADD及CMP访问 R13 限制访问 R14 限制访问 R15 限制访问 CPSR 间接访问 SPSR 不能访问
从表3-1可以看出,在Thumb状态下不能直接访问CPSR和SPSR。也就是没有和MSR和MRS等价的指令。为了改变CPSR和SPSR的值,必须使处理器状态切换到ARM状态,再使用指令MSR和MRS来实现。同样,在Thumb状态下也没有协处理器访问指令,要访问协处理器寄存器来配置Cache和进行内存管理,也必须使处理器切换到ARM状态。
3.1.2 ARM/Thumb交互工作基础
Thumb以其较高的代码密度和在窄存储器上的性能,使得它在很多系统中得到广泛应用。但在很多情况下,必须使用ARM指令,主要是由于下列原因。
(1)ARM代码比Thumb代码有更快的执行速度。
(2)ARM处理器的一些特定功能必须由ARM指令实现,例如,PSR指令、协处理器指令。
(3)异常发生时,处理器自动进入ARM状态,如果异常处理程序需要使用Thumb指令也必须通用一个ARM程序头(ARM assembler header)。
基于以上原因,即使程序需要由Thumb代码实现,也必须通过ARM-Thumb互交(ARM-Thumb i
您可能关注的文档
- 嵌入式Linux C语言程序设计基础教程 教学课件 作者 华清远见嵌入式学院 冯利美 冯建 第7章 指针.ppt
- 嵌入式Linux C语言程序设计基础教程 教学课件 作者 华清远见嵌入式学院 冯利美 冯建 第8章 函数.ppt
- 嵌入式Linux C语言程序设计基础教程 教学课件 作者 华清远见嵌入式学院 冯利美 冯建 第9章 用户自定义数据类型.ppt
- 嵌入式Linux C语言程序设计基础教程 教学课件 作者 华清远见嵌入式学院 冯利美 冯建 第10章 嵌入式C语言的高级用法.ppt
- 嵌入式Linux C语言程序设计基础教程 教学课件 作者 华清远见嵌入式学院 冯利美 冯建 第11章 嵌入式linux内核常见数据结构.ppt
- 嵌入式Linux C语言开发 教学课件 华清远见嵌入式学院 曾宏安 第1章 嵌入式linuxC语言开发工具.ppt
- 嵌入式Linux C语言开发 教学课件 华清远见嵌入式学院 曾宏安 第2章 嵌入式Linux C语言基础.ppt
- 嵌入式Linux C语言开发 教学课件 华清远见嵌入式学院 曾宏安 第3章 嵌入式Linux C高级用法.ppt
- 嵌入式Linux C语言开发 教学课件 华清远见嵌入式学院 曾宏安 第4章 嵌入式linux内核常见数据结构.ppt
- 嵌入式Linux C语言开发 教学课件 华清远见嵌入式学院 曾宏安 第5章 嵌入式Linux文件操作.ppt
- 嵌入式系统技术与设计 教学课件 作者 刘洪涛 孙天泽 04.doc
- 嵌入式系统技术与设计 教学课件 作者 刘洪涛 孙天泽 05.doc
- 嵌入式系统技术与设计 教学课件 作者 刘洪涛 孙天泽 06.doc
- 嵌入式系统技术与设计 教学课件 作者 刘洪涛 孙天泽 07.doc
- 嵌入式系统技术与设计 教学课件 作者 刘洪涛 孙天泽 08.doc
- 嵌入式系统技术与设计 教学课件 作者 刘洪涛 孙天泽 fy.DOC
- 嵌入式系统技术与设计 教学课件 作者 刘洪涛 孙天泽 ML.doc
- 嵌入式系统技术与设计 教学课件 作者 刘洪涛 孙天泽 qy.doc
- 嵌入式系统技术与设计 教学课件 作者 刘洪涛 孙天泽 第1章 嵌入式系统概述.ppt
- 嵌入式系统技术与设计 教学课件 作者 刘洪涛 孙天泽 第2章 ARM体系结构与指令集.ppt
文档评论(0)