嵌入式系统及应用——第八章.ppt

  1. 1、本文档共94页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章  嵌入式软件编程 核心内容 嵌入式程序设计语言 汇编语言 C语言 C与汇编混合编程 嵌入式Java 编程规范 8.1 嵌入式程序设计语言 一种程序设计语言可以看成是控制某种设备,特别是一种计算机的人为语言。同自然语言一样,它也使用语法和语义规则分别定义其语句结构和涵义 程序设计语言的作用在于表述算法,以便更方便地组织和操作信息。 程序设计语言的定义中应该包括以下内容 功能   目标   结构   表达能力   程序设计语言需要较高的精确度和完整性. 8.2 汇编语言 GAS的基本风格 与AT&T的差异 一、GAS的基本风格 1、程序的构成 从整体结构上看,一个完整的GAS汇编语言程序需要包括 程序名(.title,也称为头信息)、全局定义(.global)、外部引用(.include,.extern)、数据段(.data)、文本段(.text)、主程序(main)、注释(#)等部分。其中,文本段是必不可少的。 2、注释 以“#”开头的程序行是注释行。 3、标识符 标识符是由字母和数字组成的一个字符串。定义标识符时,后面必须紧跟一个冒号“:”,表示标识符所在内存单元的地址计数值。 4、常数的表示 在GAS中,数值表示如下: 1)二进制数:由0b或者0B开头,如:0b1010101、 0B1011110; 2)十六进制数:以0x或者0X开头,如:0x4e7、 0X1f9; 3)八进制数:由0开头,如:0625、0450; 4) 十进制数:以非零数开头,如:365、13180; 5)字符串:由引号括起,如:”string”。 5、常用的汇编指示符 1).rept count:表示重复count次; 2).macro、.endm:定义宏; 3).include “filename:用于将一个程序文件插入到另外一个程序文件中; 4).global name:将name申明为全局符号; 5).set name, value:申明一个符号常量,程序中使用时要在前面加一个“$”符号; 6).balign abs_expr,pad_value:表示将地址对齐; 7).p2align abs_expr,pad_value:表示将地址按2的次方对齐; 8).title “heading“:用于在生成符号列表时作为头信息。 二、与AT&T的差异 1、寄存器名的表达不同 在GAS的80386汇编语言中,寄存器的名字前都要加上百分号“%”,而Intel的则没有: 1)32位的寄存器:%eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp 2)16位的寄存器:%ax,%bx,%cx,%dx,%di,%si,%bp,%sp 3)8位的寄存器:%ah,%al,%bh,%bl,%ch,%cl,%dh,%dl 4)段寄存器:%cs,%ds,%ss,%es,%fs,%gs 5)控制寄存器:%cr0,%cr2,%cr3 2、数据传送的方向不同 GAS汇编语言中,数据的传送方向与Intel宏汇编的方向刚好相反 3、操作数位数的表达不同 在GAS汇编语言中,操作数的位数由指令的后缀表示,其中后缀为“l”表示32位,“w”表示16位,“b”表示8位。 Intel宏汇编则用操作数前缀表示法,需要使用dword、wor、byte等关键字 4、立即数的表达不同 在GAS的汇编语言中,立即数前要加前缀“$”符号 6、长跳转指令不同 5、内存引用不同 8.3 C语言 gcc扩展 C51扩展 浮点运算支持 一、 gcc扩展 gcc是为Linux配套的C语言编译器,在支持多个版本的ANSI C标准基础上,进行了一些扩展,主要集中在增强C语言的表达能力和语言功能,可通过使用-ansi、-traditional等编译参数来控制扩展功能是否启用。 GNU的gcc编译器在嵌入式领域使用的非常广泛,它支持众多的高档嵌入式处理器,如Intel386、Intel960、68000、ADM29K等。 1、表达式内可以包含变量声明、赋值、分支、循环等语句 这看上去多此一举,而且不符合通用的编程规范,但在替代不安全的宏定义时,显得特别有用,如: 要计算两次a和b,有可能带来副作用,如 如定义为 则可消除该不安全因素。 2、局部标识符 主要用于限制标识符的作用域,避免名字冲突。其声明必须在语句块的开始,形式如下: 当宏定义中有循环判断时,使用比较方便,如: 3、内嵌函数 gcc的语法中支持函数内定义新函数,该函数的名字在该语句块内有效,也可通过指针传递到该语句块之外,这种

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档