- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二讲thumb-2指令集、IAR汇编及固件库 Thumb-2指令集 同时支持16位和32位指令系统 Bit[15:11] 0b11101 0b11110 0b11111 紧邻的两个半字构成一条32位指令 其他:皆为16位指令 1 前索引2 后索引 32位指令解码 .N 表明此指令为16位指令 .W 表面此指令为32位指令集 如果没有,则根据指令的15:11位自动选择 WFE 等待一个事件发生 WFI 等待一个中断发生 汇编语言设计 汇编语言程序设计更能充分发挥处理器的硬件特性 两个优势 操作系统移植需要编写几百行底层硬件的汇编语言程序,这是C语言不可取代的。 优化算法的时空效率,C语言的目标代码优化是编译器完成的,而汇编语言的目标代码优化是人工完成的。人是算法的创造者,也是编译器的设计者,人工优化比编译器质量高。 弱点 编程效率低,开发周期长,经济代价大。 ARM汇编程序编写规范 汇编语句格式 ARM汇编中,所有标号必须在一行的顶格书写, 而所有指令均不能顶格书写。 ARM汇编器对标识符大小写敏感(即区分大小写字母),书写标号及指令时字母大小写要一致。 在ARM汇编程序中,ARM指令、伪指令、寄存器名可以全部为大写字母,也可以全部为小写字母,但不要大小写混合使用。 源程序中,语句之间可以插入空行,以使得源代码的可读性更好。 ARM汇编程序编写规范(续) 格式如下: [标号] 指令|条件|S 操作数 [;注释] 源程序中允许有空行。适当地插入空行,可以提高源程序的可读性。 如果单行代码太长,可以使用字符“\”将其分行。“\”后不能有任何字符,包括空格和制表符等。 对于变量的设置、常量的定义,其标识符必须在一行的顶格书写。 汇编指令错误的例子 DOB MOV R0,#1 ;标号DOB没有顶格书写 MOV R2,#3 ;命令不允许顶格书写 Loop Mov R2,#3 ;指令中大小写混合 B loop ;无法跳转到loop标号,大小写 ;不一致 几个重要伪指令 1.??DCB: 标号 DCB 表达式 说明:DCB用于分配一块字节单元并用伪指令中指定的表达式进行初始化。其中,表达式可以为使用双引号的字符串或0——255的数字,DCB可用“=”代替。 2.??DCD/DCDU: 标号 DCD/DCDU 表达式 说明:DCD伪指令用于分配一块字存储单元并用伪指令中指定的表达式初始化,它定义的存储空间是字对齐的。DCD也可用“”代替。 几个重要指令 3.??MODULE 用于定义一个汇编模块,可用NAME,或PRAGRMA替代 一般作为汇编源文件名 如:PROGRAM hello 几个重要指令 4.??__iar_program_start 在IAR环境中,定义IAR程序入口处,是默认的 5. PUBILC 声明外部函数或公有函数(变量) 如PUBLIC __iar_program_start 声明一个外部的变量,将该入口地址告知其他源文件以及编译器 几个重要指令 6. __vector_table 在IAR中,具有特殊意义,定义了中断向量的入口 7.SECTION 定义一个程序段, 如:SECTION .intvec:CODE:ROOT(2) ;程序段,定义中断向量 DATA __vector_table DCD 0 ;定义中断向量的入口地址(cm3中的主堆 栈地址) DCD __iar_program_start SECTION.text:CODE:REORDER(2) ;一下可写具体代码 几个重要指令 8. main 在IAR中,对于汇编此标号也是需要的,不是程序入口,而是作为主堆栈的标志 可以在设置中修改,但一般不做修改 9 .code16和code32 作为16位指令和32位指令开始的标志 等同于THUMB和ARM 10 END END指示符告诉编译器已经到了源程序结尾。 语法格式: END 使用说明: 每一个汇编源程序都包含END指示符,以告诉本源程序的结束。 内嵌汇编 内嵌汇编(inline assembly)的语法如下: asm(“指令” ); asm(“指令” ); 内嵌汇编代码举例 #includestdio.h void str_cpy(const char *src,char *dst) {
您可能关注的文档
最近下载
- 2024年四川省支付清算知识竞赛备考试题库资料汇总(含答案).pdf VIP
- !24J306图集窗井、设备吊装口、排水沟、集水坑.pdf VIP
- 精品解析:四川省广元市2024年中考地理试题(原卷版).doc VIP
- 喷雾干燥塔操作规程(正式) .doc VIP
- 标准图集-19G518-3 门式刚架轻型房屋钢结构(有吊车).pdf VIP
- 客服部部门职能说明书.pdf VIP
- 最新急性胰腺炎考题及答案.docx VIP
- (正式版)-B 5768.2-2022 道路交通标志和标线 第2部分:道路交通标志.docx VIP
- 2025年贵州省第二届职业技能大赛_民宿管家赛项备考题库(含答案).docx VIP
- 喷雾干燥塔操作规程.docx VIP
文档评论(0)