4、嵌入式程序设计基础课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《4、嵌入式程序设计基础课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 程序设计 基础 课件
- 资源描述:
-
1、1嵌入式系统及其开发应用嵌入式系统及其开发应用第四章第四章 嵌入式程序设计基础嵌入式程序设计基础-2第第4 4章章 嵌入式程序设计基础嵌入式程序设计基础l基于基于ARM的编译器一般都支持汇编语言的程序设计、的编译器一般都支持汇编语言的程序设计、C/C+语言的程序设计及两者的混合编程。语言的程序设计及两者的混合编程。l本章介绍本章介绍ARM的嵌入式程序的基础知识的嵌入式程序的基础知识l伪指令伪指令l汇编语言的语句格式汇编语言的语句格式l汇编语言程序汇编语言程序l汇编语言与汇编语言与C/C+语言的混合编程语言的混合编程-3本章提要本章提要伪指令伪指令汇编语言的语句格式汇编语言的语句格式汇编程序应用
2、汇编程序应用汇编语言与汇编语言与C/C+C/C+语言的混合编程语言的混合编程-44.1 4.1 伪指令伪指令l在在ARM汇编语言程序里,有一些特殊指令助记符,这些助汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,记符与指令系统的助记符不同,没有相对应的操作码没有相对应的操作码,通,通常称这些特殊指令助记符为常称这些特殊指令助记符为伪指令伪指令,他们所完成的操作称,他们所完成的操作称为伪操作。为伪操作。l伪指令在源程序中的伪指令在源程序中的作用作用是是既要把正常的程序用指令表达既要把正常的程序用指令表达给计算机以外,又要把程序设计者的意图表达给编译器。给计算机以外,又要把
3、程序设计者的意图表达给编译器。 例如:例如:要告诉编译器程序段的开始和结束,需要定义数要告诉编译器程序段的开始和结束,需要定义数据等。据等。-5l在在ARM的汇编程序中,我们把伪指令分为三部分介绍的汇编程序中,我们把伪指令分为三部分介绍:l通用伪指令通用伪指令 l与与ARM指令相关的伪指令指令相关的伪指令l与与Thumb指令相关的伪指令指令相关的伪指令 4.1 4.1 伪指令伪指令-64.1.1 4.1.1 通用伪指令通用伪指令 通用伪指令包括通用伪指令包括:l符号定义伪指令符号定义伪指令l数据定义伪指令数据定义伪指令l汇编控制伪指令汇编控制伪指令l及其他一些常用伪指令等。及其他一些常用伪指令
4、等。-7其中:其中:lGBLA用于声明一个全局的数字变量,并初始化为用于声明一个全局的数字变量,并初始化为0;lGBLL伪指令用于声明一个全局的逻辑变量,并初始化为伪指令用于声明一个全局的逻辑变量,并初始化为F(假);(假);lGBLS伪指令用于声明一个全局的字符串变量,并初始化为空;对于全局变伪指令用于声明一个全局的字符串变量,并初始化为空;对于全局变量来说,变量名在源程序中必须是唯一的。量来说,变量名在源程序中必须是唯一的。1.符号定义伪指令符号定义伪指令 符号定义伪指令用于声明符号定义伪指令用于声明ARM汇编程序中的变量、对变量汇编程序中的变量、对变量赋值以及定义寄存器的名称等操作。赋值
5、以及定义寄存器的名称等操作。常见的符号定义伪指令有如下几种:常见的符号定义伪指令有如下几种:(1)GBLA、GBLL和和GBLS4.1.1 4.1.1 通用伪指令通用伪指令语法格式:语法格式: GBLA(GBLL或或GBLS)全局变量名全局变量名 GBLA、GBLL和和GBLS伪指令是伪指令是声明全局变量声明全局变量的伪指令,用于定义的伪指令,用于定义一个一个ARM程序中的全局变量,并将其初始化。程序中的全局变量,并将其初始化。-8指令示例:指令示例:GBLA DATE1;声明一个全局数字变量;声明一个全局数字变量DATE1GBLLDATE1;声明一个全局逻辑变量;声明一个全局逻辑变量DATE
6、2GBLSDATA3 ;声明一个全局的字符串变量;声明一个全局的字符串变量DATE3DATE3 SETS“Testing”;将该变量赋值为;将该变量赋值为“Testing”4.1.1 4.1.1 通用伪指令通用伪指令-9(2)LCLA、LCLL和和LCLS语法格式:语法格式: LCLA(LCLL或或LCLS)局部变量名局部变量名 LCLA、LCLL和和LCLS伪指令是伪指令是声明局部变量声明局部变量伪指令,伪指令,用于定义一个用于定义一个ARM程序中的局部变量,并将其初始化。程序中的局部变量,并将其初始化。其中:其中:lLCLA用于声明一个局部的数字变量,并初始化为用于声明一个局部的数字变量,
7、并初始化为0;lLCLL用于声明一个局部的逻辑变量,并初始化为用于声明一个局部的逻辑变量,并初始化为F(假);(假);lLCLS用于声明一个局部的字符串变量,并初始化为空。对于局部变量用于声明一个局部的字符串变量,并初始化为空。对于局部变量来说,变量名在使用的范围内必须是唯一的,范围限制在定义这个变来说,变量名在使用的范围内必须是唯一的,范围限制在定义这个变量的宏指令程序段内。量的宏指令程序段内。4.1.1 4.1.1 通用伪指令通用伪指令-10指令示例:指令示例:LCLADATE4;声明一个局部数字变量;声明一个局部数字变量DATE4LCLLDATE5;声明一个局部的逻辑变量;声明一个局部的
8、逻辑变量DATE5DATA4 SETL 0 x10;为变量;为变量DATE4赋值为赋值为0 x10LCLSDATA6;声明一个局部的字符串变量;声明一个局部的字符串变量DATA64.1.1 4.1.1 通用伪指令通用伪指令-11(3)SETA、SETL和和SETS语法格式:语法格式:变量名变量名 SETA(SETL或或SETS)表达式)表达式 SETA、SETL、SETS是是变量赋值变量赋值伪指令,用于给一个伪指令,用于给一个已经定义的全局变量或局部变量赋值。已经定义的全局变量或局部变量赋值。其中:其中:lSETA用于给一个用于给一个数学数学变量赋值;变量赋值;lSETL用于给一个用于给一个逻
9、辑逻辑变量赋值;变量赋值;lSETS用于给一个用于给一个字符串字符串变量赋值;变量赋值;4.1.1 4.1.1 通用伪指令通用伪指令-12指令示例:指令示例:GBLA EXAMP1;先声明一个全局数字变量;先声明一个全局数字变量EXAMP1 EXAMP1 SETA 0 xaa;将变量;将变量EXAMP1赋值为赋值为0 xaaLCLL EXAMP2;声明一个局部的逻辑变量;声明一个局部的逻辑变量EXAMP2EXAMP1 SETLTRUE;将变量;将变量EXAMP1赋值为赋值为TRUEGBLA EXAMP3;先声明一个全局字符串变量;先声明一个全局字符串变量EXAMP3 EXAMP3 SETS“s
10、tring”;将变量;将变量EXAMP3赋值为赋值为string4.1.1 4.1.1 通用伪指令通用伪指令-13(4)RLIST语法格式:语法格式: 名称名称 RLIST 寄存器列表寄存器列表 RLIST伪指令是伪指令是定义通用寄存列表定义通用寄存列表伪指令,通用寄存器列伪指令,通用寄存器列表定义主要应用在表定义主要应用在堆栈操作或多寄存器传送中堆栈操作或多寄存器传送中,即使用该伪,即使用该伪指令定义的名称可在指令定义的名称可在ARM指令指令LDM/STM中使用。中使用。 在在LDM/STM指令中,列表中的寄存器访问次序为根据寄指令中,列表中的寄存器访问次序为根据寄存器的编号存器的编号由低到
11、高由低到高,而与列表中的寄存器排列次序无关。,而与列表中的寄存器排列次序无关。4.1.1 4.1.1 通用伪指令通用伪指令-14指令示例:指令示例:RegListRLISTR0-R5,R8 ;定义寄存器列表为;定义寄存器列表为RegList在程序中使用:在程序中使用:STMFD SP!, RegList;存储列表到堆栈;存储列表到堆栈LDMIA R5, RegList;加载列表;加载列表 4.1.1 4.1.1 通用伪指令通用伪指令-152. 数据定义伪指令数据定义伪指令 数据定义伪指令一般用于数据定义伪指令一般用于为特定的数据分配存储单元为特定的数据分配存储单元,同时可完成已分配存储单元的初
12、始化。常见的数据定义伪同时可完成已分配存储单元的初始化。常见的数据定义伪指令有如下几种:指令有如下几种:(1)DCB语法格式:语法格式: 标号标号 DCB表达式表达式 DCB伪指令是伪指令是字节分配内存单元字节分配内存单元伪指令,用来分配一片伪指令,用来分配一片连续的字节存储单元并用伪指令中指定的数值或字符初始连续的字节存储单元并用伪指令中指定的数值或字符初始化。其中,数值范围为化。其中,数值范围为0255,DCB也可用也可用“=”代替。代替。4.1.1 4.1.1 通用伪指令通用伪指令-16指令示例:指令示例:String DCB “This is a test!” ;分配一片连续的字节存储
13、单元并初始化。;分配一片连续的字节存储单元并初始化。DATA2 DCB 15, 25, 62, 00 ;为数字常量;为数字常量15,25,62,00分片内存单元分片内存单元4.1.1 4.1.1 通用伪指令通用伪指令-17(2)DCW(或(或DCWU)语法格式:语法格式: 标号标号 DCW(或(或DCWU)表达式)表达式 DCW(或(或DCWU)伪指令是)伪指令是为半字分配内存单元为半字分配内存单元,其中,其中,表达式可以为程序标号或数字表达式。表达式可以为程序标号或数字表达式。 伪指令伪指令DCW用于为半字分配一段半字对准的内存单元,用于为半字分配一段半字对准的内存单元,并用指定的数据初始化
14、;伪指令并用指定的数据初始化;伪指令DCWU用于为半字分配一用于为半字分配一段可以非半字对准的内存单元,并用指定的数据初始化。段可以非半字对准的内存单元,并用指定的数据初始化。4.1.1 4.1.1 通用伪指令通用伪指令-18指令示例:指令示例:DATA1 DCW 1, 2, 3 ;分配一片连续的半字存储单元并初始化为;分配一片连续的半字存储单元并初始化为1,2,3。DATA2 DCWU 45, 0 x2a*0 x2a ;分配一片非半字对准存储单元并初始化。;分配一片非半字对准存储单元并初始化。4.1.1 4.1.1 通用伪指令通用伪指令-19(3)DCD(或(或DCDU)语法格式:语法格式:
15、 标号标号 DCD(或(或DCDU) 表达式表达式 DCD(或(或DCDU)伪指令是)伪指令是为字分配内存单元为字分配内存单元伪指令,伪指令,其中,表达式可以为程序标号或数字表达式。其中,表达式可以为程序标号或数字表达式。DCD也可用也可用“&”代替。代替。 伪指令伪指令DCD用来为字分配一段对准的内存单元,并用指用来为字分配一段对准的内存单元,并用指定的数值或标号初始化;伪指令定的数值或标号初始化;伪指令DCDU用来为字分配一段可用来为字分配一段可以非对准的内存单元,并用指定的数值或标号初始化。以非对准的内存单元,并用指定的数值或标号初始化。4.1.1 4.1.1 通用伪指令通用伪指令-20
16、指令示例:指令示例:DATA1 DCD 4,5,6;分配一片连续的字存储单元并初始化。;分配一片连续的字存储单元并初始化。DATA2 DCDU LOOP ;为;为LOOP标号的地址值分配一个内存单元。标号的地址值分配一个内存单元。4.1.1 4.1.1 通用伪指令通用伪指令-21(4)DCFD(或(或DCFDU)和)和DCFS(或(或DCFSU)语法格式:语法格式: 标号标号 伪指令伪指令 表达式表达式lDCFD(或(或DCFDU)和)和DCFS(或(或DCFSU)都是为浮点数分配内存)都是为浮点数分配内存单元的伪指令。单元的伪指令。lDCFD用于用于为双精度的浮点数分配一段字对准的内存单元为
17、双精度的浮点数分配一段字对准的内存单元,并用指,并用指定的数据初始化,每个双精度的浮点数占两个字单元;定的数据初始化,每个双精度的浮点数占两个字单元; DCFDU用用于为双精度的浮点数分配一段于为双精度的浮点数分配一段非字对准的内存单元非字对准的内存单元,并用指定的数,并用指定的数据初始化,每个双精度的浮点数占两个字单元;据初始化,每个双精度的浮点数占两个字单元;lDCFS用于用于为单精度的浮点数分配一段字对准的内存单元为单精度的浮点数分配一段字对准的内存单元,并用指定,并用指定的数据初始化,每个单精度的浮点数占一个字单元;的数据初始化,每个单精度的浮点数占一个字单元;lDCFSU用于用于为单
18、精度的浮点数分配一段非字对准的内存单元为单精度的浮点数分配一段非字对准的内存单元,并用,并用指定的数据初始化,每个单精度的浮点数占一个字单元。指定的数据初始化,每个单精度的浮点数占一个字单元。4.1.1 4.1.1 通用伪指令通用伪指令-22指令示例:指令示例:FLO1 DCFD2E115,-5E7;分配一段字对准存储单元并初始化为指定的双精度数为;分配一段字对准存储单元并初始化为指定的双精度数为2E115,-5E7。FLO2 DCFDU 22,1E2;分配一段非字对准存储单元并初始化为指定的双精度数为;分配一段非字对准存储单元并初始化为指定的双精度数为22,1E2。FLO3 DCFS2E5,
19、-5E7;分配一段非字对准存储单元并初始化为指定的单精度数为;分配一段非字对准存储单元并初始化为指定的单精度数为2E5,-5E-7。4.1.1 4.1.1 通用伪指令通用伪指令-23(5)DCQ(或或DCQU)语法格式:语法格式: 标号标号 DCQ(或(或DCQU)表达式)表达式 DCQ(或(或DCQU)伪指令是)伪指令是为双字分配内存单元为双字分配内存单元的伪指令。的伪指令。 伪指令伪指令DCQ用于为双字分配一段用于为双字分配一段字对准字对准的内存单元,并用指的内存单元,并用指定的数据初始化;伪指令定的数据初始化;伪指令DCQU用于为双字分配一段可以用于为双字分配一段可以非字非字对准对准的内
20、存单元,并用指定的数据初始化。的内存单元,并用指定的数据初始化。指令示例:指令示例: DATA1 DCQ100 ;分配一片连续的存储单元并初始化为指定的值。;分配一片连续的存储单元并初始化为指定的值。4.1.1 4.1.1 通用伪指令通用伪指令-24(6)MAP和和FILED语法格式:语法格式: MAP 表达式,表达式,基址寄存器基址寄存器 标号标号 FIELD 表明数据字节数的数值表明数据字节数的数值MAP和和FILED是是内存表定义伪指令内存表定义伪指令。l伪指令伪指令MAP用于用于定义一个结构化的内存表的首地址定义一个结构化的内存表的首地址,MAP也可用也可用“”代替;代替;l伪指令伪指
21、令FIELD用于用于定义内存表中的数据的长度定义内存表中的数据的长度。FILED也也可用可用“#”代替。代替。4.1.1 4.1.1 通用伪指令通用伪指令-25语法格式:语法格式: MAP 表达式,表达式,基址寄存器基址寄存器 表达式可以为程序中的标号或数学表达式,基址寄存器表达式可以为程序中的标号或数学表达式,基址寄存器为可选项,当基址寄存器选项不存在时,表达式的值即为为可选项,当基址寄存器选项不存在时,表达式的值即为内存表的首地址,当该选项存在时,内存表的首地址为表内存表的首地址,当该选项存在时,内存表的首地址为表达式的值与基址寄存器的和。达式的值与基址寄存器的和。l注意:注意:MAP和和
22、FIELD伪指令仅用于定义数据结构,并不实伪指令仅用于定义数据结构,并不实际分配存储单元。际分配存储单元。4.1.1 4.1.1 通用伪指令通用伪指令-26指令示例:指令示例:MAP 0 x10,R1;定义内存表首地址的值为;定义内存表首地址的值为R1+0 x10。DATA1FIELD4;为数据;为数据DATA1定义定义4字节长度字节长度DATA2FIELD16;为数据;为数据DATA1定义定义16字节长度字节长度4.1.1 4.1.1 通用伪指令通用伪指令-27(7)SPACE语法格式:语法格式: 标号标号 SPACE 分配的内存单元字节数分配的内存单元字节数 SPACE伪指令是伪指令是内存
23、单元分配伪指令内存单元分配伪指令,用于分配一片连,用于分配一片连续的存储区域并初始化为续的存储区域并初始化为0,SPACE也可用也可用“”代替。代替。指令示例:指令示例: DATASPA SPACE100 ;为;为DATASPA分配分配100个存储单元个存储单元 ;并初始化为;并初始化为04.1.1 4.1.1 通用伪指令通用伪指令-283. 汇编控制伪指令汇编控制伪指令 汇编控制伪指令用于控制汇编程序的执行流程,常用的汇编汇编控制伪指令用于控制汇编程序的执行流程,常用的汇编控制伪指令包括以下几条:控制伪指令包括以下几条:(1)MACRO、MEND和和MEXIT语法格式:语法格式:MACRO$
24、标号标号 宏名宏名 $参数参数1,$参数参数2,语句段语句段MEXIT语句段语句段MENDMACRO、MEND和和MEXIT都是宏定义指令。都是宏定义指令。4.1.1 4.1.1 通用伪指令通用伪指令-29l伪指令伪指令MACRO定义一个定义一个宏语句段的开始宏语句段的开始;伪指令;伪指令MEND定义定义宏语句段的结束宏语句段的结束;伪指令;伪指令MEXIT可以实现可以实现从宏程序从宏程序段的跳出段的跳出。宏指令可以使用一个或多个参数,当宏指令被。宏指令可以使用一个或多个参数,当宏指令被展开时,这些参数被相应的值替换。展开时,这些参数被相应的值替换。MACRO、MEND伪伪指令可以嵌套使用。指
25、令可以嵌套使用。l宏宏是一段功能完整的程序是一段功能完整的程序,能够实现一个特定的功能,在,能够实现一个特定的功能,在使用中可以把它视为一个子程序。在其他程序中,可以调使用中可以把它视为一个子程序。在其他程序中,可以调用宏完成某个功能。用宏完成某个功能。4.1.1 4.1.1 通用伪指令通用伪指令-30l调用宏是通过调用宏的名称来实现的。调用宏是通过调用宏的名称来实现的。宏指令的使用宏指令的使用方式和功能与子程序有些相似方式和功能与子程序有些相似,子程序可以提供模块,子程序可以提供模块化的程序设计、节省存储空间并提高运行速度。化的程序设计、节省存储空间并提高运行速度。l但在使用子程序结构时需要
展开阅读全文