【教学课件】第9章ARM程序设计.ppt
《【教学课件】第9章ARM程序设计.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第9章ARM程序设计.ppt(69页珍藏版)》请在三一办公上搜索。
1、第9章 ARM程序设计,ARM常用开发环境,主要分为基于Windows平台的和基于Linux平台的两大类 基于Windows平台ADS,目前已经基本被替代RealView Developer Suite(RVDS),目前主流工具Embedded Workbench for ARM(EWARM),IAR System公司,入门简单,授权费用高RealView Microcontroller Development Kit(MDK),源自德国Keil公司,多用于低端ARM处理器开发基于Linux平台ARM-Linux-GCC,GNU开发的编译器集,依赖于不同的目标机的平台,使用繁琐但不需要授权费用
2、,RVDS开发环境简介,替代ADS的新一代开发环境集程序的编辑、编译及调试于一体 支持软件仿真和硬件调试 持汇编、C和C+等多种源代码的编译 目前广泛的应用于ARM处理器开发包括CodeWarrior IDE集成开发环境和RVDebugger调试器两部分,CodeWarrior IDE的主窗口,RVD调试器主窗口,汇编语言程序设计特点,汇编语言依赖于机器硬件,不同CPU提供的汇编指令可能有很大的不同,因此汇编源程序几乎不具有移植性;但汇编语言程序速度快、效率高,更能发挥机器硬件的长处;2.汇编程序需要用户将汇编过程中需要的一些信息明确地写入源程序,如:内存逻辑段的划分情况、数据在内存中的存放情
3、况,等等。这些信息的说明由汇编程序指定相应的伪指令来完成,并不由CPU定义;3.伪指令 是在汇编过程中执行的,因而不会在机器语言程序中产生目标代码;只有CPU定义的(助记符)指令才会生成目标代码,并在程序运行过程中执行;,6/52,4.源程序经汇编得到的目标代码实际上也是不能运行的,还要经过系统的链接定位后才能生成真正的可执行文件(.EXE文件)。即一般用汇编语言开发应用软件时应依次 完成以下几个步骤:(1)编辑得到源程序(2)汇编得到目标代码(解决语法错误)(3)链接得到可执行文件(解决定位错误)(4)调试得到功能正确的应用软件(解决逻辑错误)(以上第24步任何一步有错都应返回到第1步重来)
4、,7/52,符号定义伪指令,*,8/52,GBLA Test1;声明全局数字变量Test1,赋值为0 xaa Test1 SETA 0 xaaGBLL Test2;声明全局逻辑变量Test2,赋值为“真”Test2 SETL TRUEGBLS Test3;声明全局字符串变量为Test3,赋值为Testing“Test3 SETS Testing“LCLA Test4;声明局部数字变量Test4,赋值为0 xaa Test3 SETA 0 xaaLCLL Test5;声明局部逻辑变量Test5,赋值为“真”Test4 SETL TRUELCLS Test6;声明局部字符串变量Test6,赋值为T
5、esting“Test6 SETS Testing“RegList RLIST R0-R5,R8,R10;声明寄存器列表RegList,LDM/STM指令可通过该名称访问寄存器列表,*,9/52,数据定义伪指令,*,Str DCB“This is a test!”;分配一片连续的字节存储单元并初始化Test2Data DCW 1,2,3;分配一片连续的半字存储单元并初始化DataTest DCD 4,5,6;分配一片连续的字存储单元并初始化FdataTest DCFD 2E115,-5E7;分配一片连续的字存储单元并初始化FdataTest DCFS 2E5,-5E-7;分配一片连续的字存储单
6、元并初始化DataTest DCQ 100;分配一片连续的8字节存储单元并初始化DataSpace SPACE 100;分配连续100个字节存储单元并初始化为0,定义一个首址为4096(0 x1000)的内存表,该表中包含5个字段:A(4Bytes)、B(4Bytes)、X(8Bytes)、Y(8Bytes)、String(256Bytes)。MAP 0 x1000;内存表首地址的值为0 x1000A FIELD 4;定义A的长度为4字节,位置为0 x1000B FIELD 4;定义B的长度为4字节,位置为0 x1004X FIELD 8;定义X的长度为8字节,位置为0 x1008Y FIEL
7、D 8;定义Y的长度为8字节,位置为0 x1010String FIELD 256;定义String为256字节,位置为0 x1018LDR R6,A,基于绝对地址的内存表,仅可访问指令前/后4KB地址范围的数据字段,双精度,单精度,定义一个内存表,其首址为固定地址与R9和,表中包含同样字段。MAP 0,R9;内存表首地址为0与R9寄存器内容的和A FIELD 4;定义A的长度为4字节,相对位置为0B FIELD 4;定义B的长度为4字节,相对位置为4X FIELD 8;定义X的长度为8字节,相对位置为8YFIELD 8;定义Y的长度为8字节,相对位置为16String FIELD 256;定
8、义String为256字节,相对位置为24ADR R9,DATASTART;伪指令ADR 初始化R9 LDR R5,B;相当于LDR R5,R9,#4,可访问地址范围超过4 KB的数据,基于相对地址的内存表,定义一个内存表,其首址为PC的值,表中包含同样字段。Dstruc SPACE 280;分配280个字节单元MAP Dstruc;内存表首地址为DstrucA FIELD4;定义A的长度为4字节,相对位置为0B FIELD4;定义B的长度为4字节,相对位置为4X FIELD8;定义X的长度为8字节,相对位置为8Y FIELD8;定义Y的长度为8字节,相对位置为16String FIELD25
9、6;定义String为256字节,相对位置为24LDR R5,B;相当于LDR R5,PC,#4,基于PC的内存表,可访问地址范围不超过4 KB的数据,汇编控制伪指令,GBLA Counter;声明全局的数字变量Counter CounterSETA 3;由变量Counter控制循环次数WHILE Counter 10指令序列修改Counter的值WEND,*,13/52,宏和宏定义指令,MACRO$标号 宏名$参数1,$参数2,宏体MEND MACRO和MEND伪指令可以嵌套使用。宏的使用方式和功能与子程序有些相似。子程序可以提供模块化的程序设计、节省存储空间并提高运行速度,但在使用子程序结
10、构时需要保护现场,从而增加了系统的开销。因此,在代码较短且需要传递的参数较多时,可以使用宏指令代替子程序。,*,14/52,定义一条宏指令,使其可以完成测试-跳转操作。MICRO;宏定义开始$lable TestAndBranch$dest,$reg,$cc$lable CMP$reg,#0 B$cc$destMEND;宏定义结束,宏名,宏参,目标地址,测试寄存器,条件,用于构造宏义体内的标号,test TestAndBranch NonZero,R0,NE;程序中的宏调用NonZero,test CMP R0,#0;程序汇编时宏展开BNE NonZero;其它指令序列NonZero;其它指令
11、序列,*,15/52,MICRO;宏定义开始$lable xmac$p1,$p2;宏的名称为xmac,有两个参数$p1和$p2$lable.loop1;$lable.loop1为宏定义体的内部标号 BGE$lable.loop1$lable.loop2 指令;$lable.loop2为宏定义体的内部标号 BL$p1;参数$p1为一个子程序的名称 BGT$lable.loop2 ADR$p2MEND;宏定义结束,abc xmac subr1,de;宏调用,其中宏标号为abc,参数为subr1,de;宏展开abc.loop1 BGE abc.loop1abc.loop2 BL subr1 BGT
12、abc.loop2 ADR de,16/52,其它常用伪指令,*,17/52,AREA、ENTRY、END伪指令,AREA 段名属性1,属性2,定义代码段或数据段 1.段名若以数字开头,则该段名需用“|”括起来,如|1_test|。2.属性字段表示该代码或数据的相关属性,多个属性关键字以逗号分隔:CODE:用于定义代码段。DATA:用于定义数据段。READONLY:指定本段为只读属性,代码段默认为READONLY。READWRITE:指定本段为可读写属性,数据段默认为READWRITE。ALIGN 表达式:表达式取值为031。ELF(可执行连接文件)的段默认按字对齐。COMMON:定义一个通用
13、段,各源文件中同名的COMMON段共享同一段存储单元。,一个汇编源程序至少包含一个段,程序太长时可分为多个段并用AREA标示;一个汇编源程序最多只能有一个(可以没有)ENTRY标示程序入口;一个完整的汇编源程序中至少应有一个用ENTRY标示的入口,如有多个则程序的真正入口点由连接器指定;一个汇编源程序用END标示源文件结束;,AREA Init,CODE,READONLY;代码段Init属性为只读 ENTRY;指定应用程序的入口点指令序列END;通知编译器源程序结束,18/52,ALIGN伪指令,ALIGN 表达式,偏移量 ALIGN伪指令可通过添加填充字节的方式,使当前位置满足一定的对其方式
14、。其中:表达式可能的取值为2的幂(如1,2,4,8和16等)。若未指定表达式则将当前位置对齐到下一个字的位置。若使用偏移量字段,则当前位置的对齐方式为:表达式+偏移量。AREA Init,CODE,READONLY,ALIEN=3;指定后面的指令;为8字节对齐 指令序列END,*,19/52,CODE16、CODE32伪指令,在ARM指令和Thumb指令混合编程的代码里,该伪指令用于通知编译器其后的指令序列为16位还是32位。注意它们只能控制编译方式,并不能切换处理器状态。,AREA Init,CODE,READONLYCODE32;通知编译器其后为32位的ARM指令 LDR R0,=NEXT
15、+1;将跳转地址放入寄存器R0 BX R0;程序跳转,并将处理器切换到Thumb状态CODE16;通知编译器其后为16位的Thumb指令NEXT LDR R3,=0 x3FFEND;程序结束,20/52,EQU伪指令,名称 EQU 表达式,类型 用于为程序中的常量和标号等定义一个等效的字符名称,类似于C语言中的define。其中EQU可用“*”代替。当表达式为32位的常量时,其数据类型可以为CODE16,CODE32或DATA三种类型之一。Test EQU 50;定义常量Test的值为50Addr EQU 0 x55,CODE32;定义标号Addr的值为0 x55,且该处为32位的ARM指令,
16、*,21/52,EXPORT(或GLOBAL)标号WEAKIMPORT(或EXTERN)标号WEAK EXPORT用于声明一个全局标号,该标号可在其他文件中引用。WEAK选项声明其他同名标号优先于该标号被引用。IMPORT用于通知编译器当前源文件可能要引用其他源文件中定义的标号。WEAK选项表示所有源文件都没有定义这个标号时编译器不会给出错误信息,在多数情况下将该标号置为0。若该标号被B或BL指令引用,则将B或BL指令置为NOP操作。使用IMPORT则标号一定会被加入到当前源文件的符号表中。使用EXTERN则标号未被引用时不会被加入到当前源文件的符号表中。标号在程序中区分大小写。AREA In
17、it1,CODE,READONLYEXPORT Main;源文件1声明一个可全局引用的标号Main END AREA Init2,CODE,READONLYIMPORT Main;源文件2需要引用在别处定义的标号Main END,22/52,INCLUDE(或GET)、INCBIN伪指令,INCLUDE 文件名INCBIN 文件名INCLUDE(或GET)伪指令用于将一个源文件包含到当前的源文件中。被包含的源文件在当前位置进行汇编处理。INCBIN伪指令用于将一个目标文件或数据文件包含到当前的源文件中 被包含的文件不作任何变动,编译器从其后开始继续处理。AREA Init,CODE,READO
18、NLY GET C:a2.s;通知编译器此处插入源文件C:a2.s INCBIN a1.dat;通知编译器此处插入数据文件a1.dat INCBIN C:a2.o;通知编译器此处插入目标文件C:a2.o END,编写汇编源程序时,常将一个源文件专门用于定义宏指令(MICRO)、符号常量(EQU),结构化数据类型(MAP和FIELD),然后再用GET伪指令将这个源文件包含到其他源文件中。,汇编语言中常用的符号,在汇编语言程序设计中,经常使用各种符号代替地址、变量和常量等,以增加程序的可读性。尽管符号的命名由编程者决定,但并不是任意的,必须遵循以下的约定:符号区分大小写,同名的大小写字母符号会被编
19、译器认为是两个不同的符号;局部标号可以以数字开头,其他标号均不得以数字开头;符号在其作用范围内必须唯一;自定义的符号名不能与系统的保留字相同;符号名不应与指令或伪指令同名。,常 量,常量是指其值在程序的运行过程中不能被改变的量ARM(Thumb)汇编程序所支持的常量有数字常量、逻辑常量和字符串常量。数字常量一般为32位的整数,用“#”标识。当作为无符号数时,其取值范围为0232-1 当作为有符号数时,其取值范围为-231231-1逻辑常量只有两种取值情况:真TURE或假FAUSE。字符串常量为一个固定的字符串,一般用于程序运行时的信息提示。,*,25/52,变 量,ARM(Thumb)汇编程序
20、支持数字变量、逻辑变量和字符串变量。可用GBLA,GBLL和GBLS伪指令声明全局变量,用LCLA,LCLL和LCLS伪指令声明局部变量,并可使用SETA,SETL和SETS对其进行初始化。变量可通过代换操作(“$”)获得一个常量:如果数字变量前加“$”,编译器会将该数字变量的值转换为十六进制的字符串,并用该十六进制的字符串代换“$”后的数字变量。如果逻辑变量前加“$”,编译器会将该逻辑变量代换为其值(真或假)。如果字符串变量前加“$”,编译器会用其值代换“$”后的字符串变量。LCLS S1;定义局部字符串变量S1和S2LCLS S2S1 SETS Test!S2SETS This is a$
21、S1;S2的值为This is a Test!”,26/52,常用运算符和表达式,在汇编语言程序设计中,经常会使用各种表达式。表达式常用于各种变量的运算,一般由变量、常量、运算符和括号构成。常用表达式有数字表达式、逻辑表达式和字符串表达式,其运算次序遵循如下优先级。优先级相同的双目运算符的运算顺序为从左到右;相邻的单目运算符的运算顺序为从右到左,且单目运算符的优先级高于其他运算符;括号运算符的优先级最高。,算术/逻辑表达式及运算符,算术/逻辑表达式由数字/逻辑变量、数字/逻辑常量、运算符和括号构成。,运算次序的规定:优先级相同的双目运算符的运算顺序为从左到右;相邻的单目运算符的运算顺序为从右到
22、左,且单目运算符的优先级高于其他运算符;括号运算符的优先级最高。,28/52,注意:这些运算在汇编过程中计算,机器码中出现的已经是表达式的值了。,字符串表达式及运算符,字符串表达式一般由字符串常量、字符串变量、运算符和括号构成。编译器支持的字符串最大长度为512字节。LEN:X 返回字符串X的长度(字符数)。CHR:M 将0255之间的整数M转换为一个字符。STR:X 将数字或逻辑表达式X转换为一个字符串。对于数字表达式,STR运算得到一个以十六进制字符组成的字符串;对于逻辑表达式,STR运算得到字符串“T”或“F”。X:LEFT:Y 返回字符串X左端的一个子串。整数Y表示要返回的字符个数。X
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 ARM 程序设计

链接地址:https://www.31ppt.com/p-5659587.html