第3章 基于ARM的嵌入式软件开发基础(2).ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第3章 基于ARM的嵌入式软件开发基础(2).ppt》由会员分享,可在线阅读,更多相关《第3章 基于ARM的嵌入式软件开发基础(2).ppt(92页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1/24/20231嵌入式系统原理嵌入式系统原理柏桂枝柏桂枝3.3 基于基于ARM汇编语言程序设计基础汇编语言程序设计基础基于ARM的编译器一般都支持汇编语言的程序设计、C/C+语言的程序设计及两者的混合编程。本章介绍ARM的嵌入式程序的基础知识l伪指令l汇编语言的语句格式l汇编语言lC/C+语言的混合编程.3.3.1 伪指令伪指令l在ARM汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。l伪指令在源程序中的作用是既要把正常的程序用指令表达给计算机以外,又要把程序设计者的意图表达给编译器.
2、例如:要告诉编译器程序段的开始和结束,需要定义数据等.在ARM的汇编程序中,我们把伪指令分为三部分介绍:l通用伪指令 l与ARM指令相关的伪指令l与Thumb指令相关的伪指令 3.3.1 伪指令伪指令通用伪指令包括:l符号定义伪指令l数据定义伪指令l汇编控制伪指令l及其他一些常用伪指令等。3.3.1 伪指令伪指令1.符号定义伪指令 符号定义伪指令用于声明ARM汇编程序中的变量、对变量赋值以及定义寄存器的名称等操作。常见的符号定义伪指令有如下几种:(1)GBLA、GBLL和GBLS 语法格式:GBLA(GBLL或GBLS)全局变量名 GBLA、GBLL和GBLS伪指令是声明全局变量的伪指令,用于
3、定义一个ARM程序中的全局变量,并将其初始化。其中:GBLA用于声明一个全局的数字变量,并初始化为0;GBLL伪指令用于声明一个全局的逻辑变量,并初始化为F(假);GBLS伪指令用于声明一个全局的字符串变量,并初始化为空;对于全局变量来说,变量名在源程序中必须是唯一的。1.符号定义伪指令符号定义伪指令 符号定义伪指令用于声明符号定义伪指令用于声明ARM汇编程序中的变量、对变量汇编程序中的变量、对变量赋值以及定义寄存器的名称等操作。赋值以及定义寄存器的名称等操作。常见的符号定义伪指令有如下几种:常见的符号定义伪指令有如下几种:(1)GBLA、GBLL和和GBLS指令示例:GBLADATE1;声明
4、一个全局数字变量DATE1GBLLDATE1;声明一个全局逻辑变量DATE2GBLSDATA3;声明一个全局的字符串变量DATE3DATE3SETS“Testing”;将该变量赋值为“Testing”(2)LCLA、LCLL和LCLS语法格式:LCLA(LCLL或LCLS)局部变量名LCLA、LCLL和LCLS伪指令是声明局部变量伪指令,用于定义一个ARM程序中的局部变量,并将其初始化。其中:LCLA用于声明一个局部的数字变量,并初始化为0;LCLL用于声明一个局部的逻辑变量,并初始化为F(假);LCLS用于声明一个局部的字符串变量,并初始化为空。对于局部变量来说,变量名在使用的范围内必须是唯
5、一的,范围限制在定义这个变量的宏指令程序段内。指令示例:LCLADATE4;声明一个局部数字变量DATE4LCLLDATE5;声明一个局部的逻辑变量DATE5DATA4SETL0 x10;为变量DATE4赋值为0 x10LCLSDATA6;声明一个局部的字符串变量DATA6(3)SETA、SETL和和SETS语法格式:语法格式:变量名变量名 SETA(SETL或或SETS)表达式)表达式 SETA、SETL、SETS是变量赋值伪指令,用于给一个已经定义的全是变量赋值伪指令,用于给一个已经定义的全局变量或局部变量赋值。局变量或局部变量赋值。其中:其中:lSETA用于给一个数学变量赋值;用于给一个
6、数学变量赋值;lSETL用于给一个逻辑变量赋值;用于给一个逻辑变量赋值;lSETS用于给一个字符串变量赋值;用于给一个字符串变量赋值;指令示例:指令示例:GBLA EXAMP1;先声明一个全局数字变量;先声明一个全局数字变量EXAMP1 EXAMP1 SETA0 xaa;将变量;将变量EXAMP1赋值为赋值为0 xaaLCLL EXAMP2;声明一个局部的逻辑变量;声明一个局部的逻辑变量EXAMP2EXAMP1 SETLTRUE;将变量;将变量EXAMP1赋值为赋值为TRUEGBLA EXAMP3;先声明一个全局字符串变量;先声明一个全局字符串变量EXAMP3 EXAMP3 SETS“stri
7、ng”;将变量;将变量EXAMP3赋值为赋值为string(4)RLIST语法格式:语法格式:名称名称 RLIST 寄存器列表寄存器列表 RLIST伪指令是定义通用寄存列表伪指令,通用寄存器列伪指令是定义通用寄存列表伪指令,通用寄存器列表定义主要应用在堆栈操作或多寄存器传送中,即使用该表定义主要应用在堆栈操作或多寄存器传送中,即使用该伪指令定义的名称可在伪指令定义的名称可在ARM指令指令LDM/STM中使用。中使用。在在LDM/STM指令中,列表中的寄存器访问次序为根据寄指令中,列表中的寄存器访问次序为根据寄存器的编号存器的编号由低到高由低到高,而与列表中的寄存器排列次序无关。,而与列表中的寄
8、存器排列次序无关。指令示例:指令示例:RegListRLIST R0-R5,R8;定义寄存器列表为;定义寄存器列表为RegList在程序中使用:在程序中使用:STMFD SP!,RegList;存储列表到堆栈;存储列表到堆栈LDMIA R5,RegList;加载列表;加载列表 2.数据定义伪指令数据定义伪指令 数据定义伪指令一般用于为特定的数据分配存储单元,同数据定义伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。常见的数据定义伪指时可完成已分配存储单元的初始化。常见的数据定义伪指令有如下几种:令有如下几种:(1)DCB语法格式:语法格式:标号标号 DCB表达式表达式
9、 DCB伪指令是字节分配内存单元伪指令,用来分配一片伪指令是字节分配内存单元伪指令,用来分配一片连续的字节存储单元并用伪指令中指定的数值或字符初始连续的字节存储单元并用伪指令中指定的数值或字符初始化。其中,数值范围为化。其中,数值范围为0255,DCB也可用也可用“=”代替。代替。指令示例:指令示例:String DCB “This is a test!”;分配一片连续的字节存储单元并初始化。;分配一片连续的字节存储单元并初始化。DATA2 DCB 15,25,62,00;为数字常量;为数字常量15,25,62,00分片内存单元分片内存单元(2)DCW(或(或DCWU)语法格式:语法格式:标号
10、标号DCW(或(或DCWU)表达式)表达式 DCW(或(或DCWU)伪指令是为半字分配内存单元,)伪指令是为半字分配内存单元,其中,表达式可以为程序标号或数字表达式。其中,表达式可以为程序标号或数字表达式。伪指令伪指令DCW用于为半字分配一段半字对准的内存单元,用于为半字分配一段半字对准的内存单元,并用指定的数据初始化;伪指令并用指定的数据初始化;伪指令DCWU用于为半字分配一用于为半字分配一段可以非半字对准的内存单元,并用指定的数据初始化。段可以非半字对准的内存单元,并用指定的数据初始化。指令示例:DATA1DCW1,2,3;分配一片连续的半字存储单元并初始化为1,2,3。DATA2DCWU
11、45,0 x2a*0 x2a;分配一片非半字对准存储单元并初始化。(3)DCD(或DCDU)语法格式:标号DCD(或DCDU)表达式DCD(或DCDU)伪指令是为字分配内存单元伪指令,其中,表达式可以为程序标号或数字表达式。DCD也可用“&”代替。伪指令DCD用来为字分配一段对准的内存单元,并用指定的数值或标号初始化;伪指令DCDU用来为字分配一段可以非对准的内存单元,并用指定的数值或标号初始化。指令示例:指令示例:DATA1 DCD 4,5,6;分配一片连续的字存储单元并初始化。;分配一片连续的字存储单元并初始化。DATA2 DCDU LOOP ;为;为LOOP标号的地址值分配一个内存单元。
12、标号的地址值分配一个内存单元。(4)DCFD(或DCFDU)和DCFS(或DCFSU)语法格式:标号伪指令表达式lDCFD(或DCFDU)和DCFS(或DCFSU)都是为浮点数分配内存单元的伪指令。lDCFD用于为双精度的浮点数分配一段字对准的内存单元,并用指定的数据初始化,每个双精度的浮点数占两个字单元;DCFDU用于为双精度的浮点数分配一段非字对准的内存单元,并用指定的数据初始化,每个双精度的浮点数占两个字单元;lDCFS用于为单精度的浮点数分配一段字对准的内存单元,并用指定的数据初始化,每个单精度的浮点数占一个字单元;lDCFSU用于为单精度的浮点数分配一段非字对准的内存单元,并用指定的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 基于ARM的嵌入式软件开发基础2 基于 ARM 嵌入式 软件 开发 基础
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内