嵌入式系统设计与开发 教学课件 作者 马文华 主编 邓耀华 汤秀春 胡伟 副主编 4嵌入式程序设计.ppt

嵌入式系统设计与开发 教学课件 作者 马文华 主编 邓耀华 汤秀春 胡伟 副主编 4嵌入式程序设计.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 嵌入式程序设计 第一节 汇编语言程序结构 第二节 ARM汇编语言程序设计 第三节 C语言与汇编语言混合编程 第一节 汇编语言程序结构 4.1.1 ARM编译模式与开发环境 4.1.2 ARM汇编语言的伪操作、伪指令与宏指令 4.1.3 CodeWarrior 编译器下的伪操作与伪指令 第一节 汇编语言程序结构 4.1.1 ARM编译模式与开发环境 常见的的ARM编译开发环境有两种: 由ARM公司开发的ADS/SDT IDE,使用了CodeWarrior的编译器。 由GNU的汇编器as、交叉编译器GCC和链接器ld等组成的IDE开发环境。 下面分别介绍在ADS编译环境和GNU环境 下的汇编程序框架。 基于GCC编译器的汇编语言程序框架 .text _start: .global start .global main b main main: mov R1, #1 ldr R2, #2 addop: add R1,R1,R2 mov pc, lr .end 1.汇编语句结构 addop: add R0,R1,R2 @R0=R1+R2 一句完整的汇编语句由3部分组成: 代码的行号。如addop,在汇编程序中,行号是代码在程序中的相对地址,在程序设计中常常用在跳转指令和变量定义中。 执行代码。如add R0,R1,R2 。 注释。由“@”或者“;”开始。 2.程序分析 .text 伪指令标识了源程序的开始;随后的“_start: .global start”语句中, start是行号,在连接时用,.global伪指令定义了全局变量start;紧接着的是main函数部分,对寄存器进行操作,得到结果后有语句mov pc, lr结束程序并交出CPU控制权,语句中pc 是寄存器R15 的别名,lr是连接寄存器的别名,即为R14;程序最后的.end伪指令表示程序的结束。 在GNU的编译器中经常使用的伪指令还包括: .arm或.code32,用于标识后面的汇编代码的指令集是32位的ARM指令。 .thumb或.code 16,用于标识后面的代码是16位的thumb指令集的代码。 .thumb_func,表示下面的代码是使用thumb指令集的函数。 .secton,告诉编译代码段的类型。 ldr register,=expression,其作用是将32位的立即数存放到寄存器中。 .ltorg和.pool,表明一个新的数据缓冲池的开始。 .align,通过添加字节使当前位置满足一定的对齐方式 .macro和.endm,声明一个宏。 数据初始化指令.equ.set,作用都是将变量初始化。 数据填充指令.fill.zero和.space(.skip) 。 整型数据分配伪指令.byte、.hword 、.short 、.word 、.int和.long 。 字符串定义伪指令.ascii 、.asciz和.string 。 逻辑判断伪指令包括If.elsefi.else.endif.ifdef.ifndef.ifc.ifnc.ifeq.ifne 。 循环伪指令.rept和.endr。 函数定义伪指令.func和.endfunc 。 CodeWarrior环境下汇编程序框架 AREA Add,CODE, READONLY ENTRY start MOV R0, #1 MOV R1, #2 Addop ADD R0, R0, R1 stop MOV R0, #0X18 LDR R1, =0X20026 SWI 0x123456 END 程序开始的AREA Add,CODE, READONLY定义了一个代码段。 第二句汇编语句的ENTRY是一个伪指令,相当于c语言中的main()函数,用来标识一个代码段的入口. Stop部分的作用是将程序的控制权力转交给调试器,其中需要完成3部分的工作。 ①在寄存器R0中写入操作的类型。 ②在R1中写入程序的状态参数。 ③使用SEI将控制权转交给调试器。 4) 程序最后以END伪指令结尾,END伪指令必须和ENTRY配对使用。 4.1.2 ARM汇编语言的伪操作、伪指令与宏指令 在ARM汇编语言中,伪操作是ARM汇编语言 程序里的一些特殊指令助记符,作用主要是为完 成汇编程序做各种准备工作,在源程序进行汇编 时由汇编程序处理,而不是在程序运行期间由CPU执 行。而伪指令是ARM汇编语言程序里的特殊指令助记 符,在处理器运行期间不执行,它们在汇编时将被相应 的机器指令代替成ARM或Thu

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档