【教学课件】第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调试器主窗口 汇编语言程序言程序设计特点特点1.1.汇编语言依赖于机器硬件,不同汇编语言依赖于机器硬件,不同CPUCPU提供的汇编指令可能提供的汇编指令可能有很大的不同,因此汇编源程序几乎不具有移植性;但汇有很大的不同,因此汇编源程序几乎不具有移植性;但汇编语言程序速度快、效率高,更能发挥
3、机器硬件的长处;编语言程序速度快、效率高,更能发挥机器硬件的长处;2.2.汇编程序需要用户将汇编过程中需要的一些信息明确地写入汇编程序需要用户将汇编过程中需要的一些信息明确地写入源程序,如:内存逻辑段的划分情况、数据在内存中的存源程序,如:内存逻辑段的划分情况、数据在内存中的存放情况,等等。这些信息的说明由汇编程序指定相应的放情况,等等。这些信息的说明由汇编程序指定相应的伪伪指令指令来完成,并不由来完成,并不由CPUCPU定义;定义;3 3.伪指令伪指令 是在汇编过程中执行的,因而不会在机器语言程序中是在汇编过程中执行的,因而不会在机器语言程序中产生目标代码;只有产生目标代码;只有CPUCPU
4、定义的定义的(助记符)指令(助记符)指令才会生成才会生成目标代码,并在程序运行过程中执行;目标代码,并在程序运行过程中执行;汇编语言源程序汇编语言源程序机器语言程序机器语言程序(目标代码)(目标代码)汇编(汇编程序)汇编(汇编程序)高级语言源程序高级语言源程序编译或解释(编译程序)编译或解释(编译程序)6/524.源程序经汇编得到的目标代码实际上也是不能运行源程序经汇编得到的目标代码实际上也是不能运行的,还要经过系统的链接定位后才能生成真正的的,还要经过系统的链接定位后才能生成真正的可执行可执行文件(文件(.EXE.EXE文件)。即一般用汇编语言开发文件)。即一般用汇编语言开发 应用软件时应应
5、用软件时应依次依次 完成以下几个步骤:完成以下几个步骤:(1 1)编辑得到源程序)编辑得到源程序(2 2)汇编得到目标代码(解决语法错误)汇编得到目标代码(解决语法错误)(3 3)链接得到可执行文件(解决定位错误)链接得到可执行文件(解决定位错误)(4 4)调试得到功能正确的应用软件(解决逻辑错误)调试得到功能正确的应用软件(解决逻辑错误)(以上第(以上第2 24 4步任何一步有错都应返回到第步任何一步有错都应返回到第1 1步重来)步重来)7/52符号定符号定义伪指令指令 符号类型符号类型指示符指示符功能功能符号定义符号定义伪指令伪指令GBLA声明和初始化一个声明和初始化一个全局全局算术变量,
6、初始值为算术变量,初始值为0GBLL声明和初始化一个全局逻辑变量,初始值为声明和初始化一个全局逻辑变量,初始值为FALSEGBLS声明和初始化一个全局字符串变量,初始值为空声明和初始化一个全局字符串变量,初始值为空LCLA声声明明和和初初始始化化一一个个局局部部算算术术变变量量,初初始始值值为为0。局局部部算算术术变变量量只只能在宏中进行声明。能在宏中进行声明。LCLL声声明明和和初初始始化化一一个个局局部部逻逻辑辑变变量量,初初始始值值为为FALSE。局局部部逻逻辑辑变变量只能在宏中进行声明。量只能在宏中进行声明。LCLS声声明明和和初初始始化化一一个个局局部部字字符符串串变变量量,初初始始
7、值值为为空空。局局部部字字符符串串变变量量只能在宏中进行声明。只能在宏中进行声明。SETA给一个局部或全局算术变量给一个局部或全局算术变量置值置值SETL给一个局部或全局逻辑变量置值给一个局部或全局逻辑变量置值SETS给一个局部或全局字符串变量置值给一个局部或全局字符串变量置值RLIST给寄存器集给寄存器集命名命名CN给一个协处理器寄存器命名给一个协处理器寄存器命名CP给一个特定协处理器命名,协处理器号为给一个特定协处理器命名,协处理器号为015DN给一个双精度给一个双精度VFP寄存器命名寄存器命名SN给一个单精度给一个单精度VFP寄存器命名寄存器命名FN给一个特定的浮点寄存器命名给一个特定的
8、浮点寄存器命名*8/52GBLA 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,赋
9、值为,赋值为“真真”Test4 SETL TRUELCLS Test6;声明局部字符串变量声明局部字符串变量Test6,赋值为,赋值为Testing“Test6 SETS Testing“RegList RLIST R0-R5,R8,R10;声明寄存器列表声明寄存器列表RegList,LDM/STM指令可通过该名称访问寄存器列表指令可通过该名称访问寄存器列表*9/52数据定数据定义伪指令指令 数据定义数据定义伪指令伪指令LTORG指定指定一个文字池用以保存数据一个文字池用以保存数据 或或MAP指定一个内存表的首址指定一个内存表的首址#或或FIELD指定内存表中的各数据域的指定内存表中的各数据域
10、的长长度(一般在度(一般在MAP之后)之后)%或或SPACE指定一指定一块块存存储储器的器的长长度并将其中度并将其中单单元初始化元初始化为为0=或或DCB分配分配一片一片连续连续的字的字节单节单元并元并初始化初始化分配一片分配一片连续连续的字的字节单节单元并用于存放代元并用于存放代码码&或或DCD分配一片分配一片连续连续的字的字单单元并初始化(字元并初始化(字边边界界对齐对齐)DCDU分配一片分配一片连续连续的字的字单单元并初始化(任意元并初始化(任意边边界)界)DCDO分分配配一一片片连连续续的的字字单单元元,并并初初始始化化为为到到静静态态基基址址寄寄存存器器R9R9的的偏偏移移量量(字(
11、字边边界界对齐对齐)DCFD分配一片分配一片连续连续的字的字单单元元给给双精度浮点数并初始化(字双精度浮点数并初始化(字边边界界对齐对齐)分配一片分配一片连续连续的字的字单单元元给单给单精度浮点数并初始化(字精度浮点数并初始化(字边边界界对齐对齐)DCFDU分配一片分配一片连续连续的字的字单单元元给给双精度浮点数并初始化(任意双精度浮点数并初始化(任意边边界)界)分配一片分配一片连续连续的字的字单单元元给单给单精度浮点数并初始化(任意精度浮点数并初始化(任意边边界)界)DCFSDCFSUDCIDCQ分配一片分配一片连续连续的的8字字节单节单元并初始化(字元并初始化(字边边界界对齐对齐)DCQU
12、分配一片分配一片连续连续的的8字字节单节单元并初始化(任意元并初始化(任意边边界)界)DCW分配一片分配一片连续连续的半字的半字单单元并初始化(半字元并初始化(半字边边界界对齐对齐)DCWU分配分配一片一片连续连续的半字的半字单单元并初始化(任意元并初始化(任意边边界)界)DATA标识标识代码段中的数据标号,该符号后是代码段中的数据标号,该符号后是DCBDCB等等*Str DCB“This is a test!”;分配一片连续的分配一片连续的字节字节存储单元并初始化存储单元并初始化Test2Data DCW 1,2,3;分配一片连续的分配一片连续的半字半字存储单元并初始化存储单元并初始化Dat
13、aTest DCD 4,5,6;分配一片连续的分配一片连续的字字存储单元并初始化存储单元并初始化FdataTest DCFD 2E115,-5E7;分配一片连续的分配一片连续的字字存储单元并初始化存储单元并初始化FdataTest DCFS 2E5,-5E-7;分配一片连续的分配一片连续的字字存储单元并初始化存储单元并初始化DataTest DCQ 100;分配一片连续的分配一片连续的8 8字节字节存储单元并初始化存储单元并初始化DataSpace SPACE 100;分配连续分配连续100100个字节个字节存储单元并初始化为存储单元并初始化为0 0 定义一个首址为定义一个首址为4096(0
14、x1000)4096(0 x1000)的内存表,该表中包含的内存表,该表中包含5 5个字段:个字段:A(4Bytes)A(4Bytes)、B(4Bytes)B(4Bytes)、X(8Bytes)X(8Bytes)、Y(8Bytes)Y(8Bytes)、String(256Bytes)String(256Bytes)。MAP 0 x1000;内存表首地址的值为内存表首地址的值为0 x10000 x1000A FIELD 4;定义定义A A的长度为的长度为4 4字节,位置为字节,位置为0 x10000 x1000B FIELD 4 4;定义定义B B的长度为的长度为4 4字节,位置为字节,位置为0
15、 x10040 x1004X FIELD 8;定义定义X X的长度为的长度为8 8字节,位置为字节,位置为0 x10080 x1008Y FIELD 8;定义定义Y Y的长度为的长度为8 8字节,位置为字节,位置为0 x10100 x1010String FIELD 256;定义定义StringString为为256256字节,位置为字节,位置为0 x10180 x1018LDR R6,A R6,A 基于绝对地基于绝对地址的内存表址的内存表仅可访问指令前仅可访问指令前/后后4KB4KB地址范围的数据字段地址范围的数据字段双精度双精度单精度单精度定义一个内存表,其首址为固定地址与定义一个内存表,
16、其首址为固定地址与R9R9和,表中包含同样字段。和,表中包含同样字段。MAP MAP 0,R9 0,R9 ;内存表首地址为内存表首地址为0 0与与R9R9寄存器内容的和寄存器内容的和A A FIELD FIELD 4 4;定义定义A A的长度为的长度为4 4字节,相对位置为字节,相对位置为0 0B B FIELD FIELD 4 4;定义定义B B的长度为的长度为4 4字节,相对位置为字节,相对位置为4 4X X FIELD FIELD 8 8;定义定义X X的长度为的长度为8 8字节,相对位置为字节,相对位置为8 8Y YFIELD FIELD 8 8;定义定义Y Y的长度为的长度为8 8字
17、节,相对位置为字节,相对位置为1616String String FIELD FIELD 256256;定义定义StringString为为256256字节,相对位置为字节,相对位置为2424ADR ADR R9,DATASTARTR9,DATASTART;伪指令;伪指令ADR ADR 初始化初始化R9 R9 LDR LDR R5,B R5,B ;相当于相当于LDR R5,R9,#4LDR R5,R9,#4可访问地址范围可访问地址范围超过超过4 KB4 KB的数据的数据基于相对地基于相对地址的内存表址的内存表定义一个内存表,其首址为定义一个内存表,其首址为PCPC的值,表中包含同样字段。的值,
18、表中包含同样字段。Dstruc Dstruc SPACE SPACE 280280;分配分配280280个字节单元个字节单元MAP MAP Dstruc Dstruc ;内存表首地址为内存表首地址为DstrucDstrucA A FIELDFIELD4 4;定义定义A A的长度为的长度为4 4字节,相对位置为字节,相对位置为0 0B B FIELDFIELD4 4;定义定义B B的长度为的长度为4 4字节,相对位置为字节,相对位置为4 4X X FIELDFIELD8 8;定义定义X X的长度为的长度为8 8字节,相对位置为字节,相对位置为8 8Y Y FIELDFIELD8 8;定义定义Y
19、Y的长度为的长度为8 8字节,相对位置为字节,相对位置为1616String String FIELDFIELD256256;定义定义StringString为为256256字节,相对位置为字节,相对位置为2424LDR LDR R5,B R5,B ;相当于相当于LDR R5,PC,#4LDR R5,PC,#4基于基于PCPC的的内存表内存表可访问地址范围不可访问地址范围不超过超过4 KB4 KB的数据的数据汇编控制控制伪指令指令 GBLA Counter;声明全局的数字变量声明全局的数字变量Counter Counter SETA 3;由变量由变量Counter控制循环次数控制循环次数WHI
20、LE Counter YX大于YX=YX大于等于YX=YX小于等于YX/=YX不等于YX YX不等于YX:LAND:Y逻辑与X:LOR:Y逻辑或:LNOT:Y逻辑非X:LEOR:Y逻辑异或28/52注意:这些运算在汇注意:这些运算在汇编过程中计算,机器编过程中计算,机器码中出现的已经是表码中出现的已经是表达式的值了。达式的值了。字符串表达式及运算符字符串表达式及运算符字符串表达式一般由字符串表达式一般由字符串常量、字符串变量、运算符和括号字符串常量、字符串变量、运算符和括号构成。编译构成。编译器支持的字符串最大长度为器支持的字符串最大长度为512字节字节。LEN:X返回字符串返回字符串X的长度
21、的长度(字符数字符数)。CHR:M将将0255之间的整数之间的整数M转换为一个字符。转换为一个字符。STR:X将数字或逻辑表达式将数字或逻辑表达式X转换为一个字符串。转换为一个字符串。对于数字表达式,对于数字表达式,STR运算得到一个以十六进制字符组成的字符串;运算得到一个以十六进制字符组成的字符串;对于逻辑表达式,对于逻辑表达式,STR运算得到字符串运算得到字符串“T”或或“F”。X:LEFT:Y返回字符串返回字符串X左端的一个子串。整数左端的一个子串。整数Y表示要返回的字符个数表示要返回的字符个数。X:RIGHT:Y返回字符串返回字符串X右端的一个子串。整数右端的一个子串。整数Y表示要返回
22、的字符个数表示要返回的字符个数X:CC:Y将字符串将字符串Y连接到字符串连接到字符串X的后面形成一个新字符串。的后面形成一个新字符串。*29/52其它常用运算符其它常用运算符?X?X返回定义符号返回定义符号X X的代码行所生成的可执行代码的长度(字的代码行所生成的可执行代码的长度(字节数)节数):DEF:X:DEF:X 判断是否定义了符号判断是否定义了符号X X:如果符号:如果符号X X已经定义则结果为真,已经定义则结果为真,否则为假。否则为假。BASE:X BASE:X 返回基于寄存器的表达式返回基于寄存器的表达式X X中寄存器的编号。中寄存器的编号。INDEX:XINDEX:X 返回基于寄
23、存器的表达式返回基于寄存器的表达式X X中相对于其基址寄存器的偏移中相对于其基址寄存器的偏移量。量。*30/52ARM汇编语言程序言程序结构构 ARM(Thumb)ARM(Thumb)汇编语言程序中,以汇编语言程序中,以程序段(代码段和数据段)程序段(代码段和数据段)为单位组织代码。为单位组织代码。一个汇编程序至少应该有一个代码段。当程序较长时,可以一个汇编程序至少应该有一个代码段。当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译连接时最终形分割为多个代码段和数据段,多个段在程序编译连接时最终形成一个可执行的映象文件。成一个可执行的映象文件。可执行映象文件可执行映象文件通常由以下几
24、部分构成:通常由以下几部分构成:一个一个或多个代码段,代码段的属性默认为或多个代码段,代码段的属性默认为READONLYREADONLY。零个或多个包含初始化数据的数据段,数据段的属性默认为零个或多个包含初始化数据的数据段,数据段的属性默认为READWRITEREADWRITE。零个或多个不包含初始化数据的数据段,数据段的属性为默认为零个或多个不包含初始化数据的数据段,数据段的属性为默认为READWRITEREADWRITE。*31/52ARM汇编语言程序言程序结构示例构示例GET option.sGET addr.s AREA Init,CODE,READONLY ENTRY spr MUL
25、r1,r0,r0 AREAData1,DATA,READWRITE num DCD10 END引用其它源文件代码段数据段 定义代码段 指定程序入口 程序主体ARMARM汇编程序设计实例汇编程序设计实例 重点介绍如何用ARM汇编语言实现:顺序结构分支结构循环结构子程序调用与返回 顺序序结构构-两个两个64位数相加位数相加 AREA add64,CODE,READONLYENTRYstart LDRR0,=data1 ;R0中保存data1的首地址LDRR1,R0 ;用寄存器间接寻址方式读数据1的高32位到R1LDRR2,R0,#4 ;用寄存器间接寻址方式读数据1的低32位到R2LDRR0,=da
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 ARM 程序设计

限制150内