- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于ARM的嵌入式系统接口技术;第三章 嵌入式程序设计语言 ;回顾;学习目标与要求;3.1 工作场景导入;3.1.1 工作场景一;引导问题;3.1.2 工作场景二;引导问题;3.2 ARM汇编中的伪操作;3.2 ARM汇编中的伪操作;3.2 ARM汇编中的伪操作;;例:代码二;比较上面完成同样功能的两段代码可以看到,其中ARM汇编的指令是相同的,另外还有一些不同的语句,而且这些语句一般对程序所完成的功能没有影响,这些语句的作用是为了完成汇编程序做各种准备工作的,即伪操作。之所以完成同样功能的程序代码的伪操作不同,是因为他们用的编译开发环境不同。第一段代码是ARM汇编集成开发环境所支持的伪操作,第二段代码是GNUARM汇编集成开发环境所支持的伪操作。
可见,不同的编译开发环境所使用的伪操作可能有所不同。 ;3.2.1 常用伪操作的分类;3.2.1 常用伪操作的分类;3.2.1 常用伪操作的分类;3.2.1 常用伪操作的分类;3.2.1 常用伪操作的分类;3.2.1 常用伪操作的分类;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.2.2 常用伪操作的用法;3.3 汇编语言程序设计;ARM汇编程序设计;完整的ARM汇编语言源文件一般由一个或几个段组成,每个段均由AREA(或者GNU ARM下的.section)伪操作声明,并且以END(或者GNUARM下的.end)做为汇编源文件的结束。段可以分为多种,如代码段、数据段等,每个段又有不同的属性,如代码段的属性一般设为READONLY,数据段的属性一般设为READWRITE。 如:
ARM汇编环境: AREA TEST,CODE,READONLY
……
END
GNU ARM环境: .section .text
……
.end;段的内部 ,ARM汇编程序中每一行的通用格式为:
{标号} {指令|指示符|伪指令} {;注解}。
在ARM汇编语言源程序中,除了标号和注释外,指令、伪指令和指示符都必须有前导空格,而不能顶格书写。如果每一行的代码太长,可以使用字符“\”??其分行书写,并允许有空行。指令助记符、指示符和寄存器名既可以用大写字母,也可以用小写字母,但不能混用。;标签是一个符号,可以代表指令的地址、变量、数据的地址和常量。一般以字母开头,由字母、数字、下划线组成。
标号代表一个地址,段内标号的地址值在汇编时确定,段外标号的地址值在链接时确定。在程序段中,标号代表其所在位置与段首地址的偏移量。
在ARM汇编编译器中,所有的标签必须在一行的开头顶格写,前面不能留空格,后面不能加“:”;
在GNU ARM汇编编译器中,标签的后面需要加上“:”,对前面是否留空格也没有严格的规定。
注释从“;”or“@”开始,到该行结束为止。在ARM汇编编译器中,注释从“;”开始;而在GNU ARM汇编编译器中,注释从“@”开始。;1. 预定义变量
ARM汇编器对ARM的寄存器进行了预定义,所有的寄存器和协处理器名都是大小写敏感的。预定义的寄存器如下:
R0~R15和r0~r15;
a1~a4(参数、结果或临时寄存器,与r0~r3同义);
v1~v8(变量寄存器,与r4~r11同义);
sb和SB(静态基址寄存器,与r9同义);
sl和SL(堆栈限制寄存器,与r10同义);
fp和FP(帧指针,与r11同义);
ip和IP(过程调用中间临时寄存器,与r12同义);;1. 预定义变量
sp和SP(堆栈指针,与r13同义);
lr和LR(链接寄存器,与r14同义);
pc和PC(程序计数器,与r15同义);
cpsr和CPSR(程序状态寄存器);
spsr和SPSR(程序状态寄存器);
f0~f7和F0~F7(FPA寄存器);
s0~s31和S0~S31(VFP单精度寄存器);
d0~d15和D0~D15(VFP双精度寄存器);
p0~p15(协处理器0~15);
c0~c15(协处理器寄存器0~15)。 ;2. 内置变量
ARM汇编器所定义的内置变量如表4-1所示。值得注意的是内置变量的设置不能用SETA、SETL或SETS等指示符来设置,只能用于表达式或条件语句。例如:
IF {ARCHITECTURE} = “4T”;变量
;{CODES
原创力文档


文档评论(0)