嵌入式系统基础第5章-ARM汇编课件.ppt

上传人(卖家):晟晟文业 文档编号:4581062 上传时间:2022-12-21 格式:PPT 页数:98 大小:1.85MB
下载 相关 举报
嵌入式系统基础第5章-ARM汇编课件.ppt_第1页
第1页 / 共98页
嵌入式系统基础第5章-ARM汇编课件.ppt_第2页
第2页 / 共98页
嵌入式系统基础第5章-ARM汇编课件.ppt_第3页
第3页 / 共98页
嵌入式系统基础第5章-ARM汇编课件.ppt_第4页
第4页 / 共98页
嵌入式系统基础第5章-ARM汇编课件.ppt_第5页
第5页 / 共98页
点击查看更多>>
资源描述

1、共96页1第第5 5章章 ARMARM汇编汇编本章主要内容本章主要内容1 1、汇编、汇编器和汇编语言程序的基本、汇编、汇编器和汇编语言程序的基本概念概念2 2、ARMARM汇编语言中的符号汇编语言中的符号 3 3、ARMARM的伪指令、宏的伪指令、宏4 4、汇编语句格式、汇编语句格式共96页25 5、ARMARM汇编语言中的表达式及运算符汇编语言中的表达式及运算符共96页35.1 5.1 汇编器与汇编语言汇编器与汇编语言 ARM ARM编译器支持汇编语言的程序设计编译器支持汇编语言的程序设计和和C/C+C/C+语言的程序设计,以及两者两者语言的程序设计,以及两者两者的混合编程。的混合编程。1

2、1、什么叫汇编语言、什么叫汇编语言 汇编语言汇编语言(Assembly Language)(Assembly Language)是面是面向机器的程序设计语言。向机器的程序设计语言。共96页4 在汇编语言中,用助记符在汇编语言中,用助记符(Memoni)(Memoni)代代替操作码,用地址符号替操作码,用地址符号(Symbol)(Symbol)或标号或标号(Label)(Label)代替地址码。这样用符号代替机代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。汇编语言。于是汇编语言亦称为符号语言。2 2、汇编

3、语言的优点、汇编语言的优点共96页5 汇编语言比机器语言易于读写、易于汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不赖于具体的机型,不能通用,也不能在不同机型之间移植。同机型之间移植。3 3、什么叫汇编器、什么叫汇编器共96页6 使用汇编语言编写的程序,机器不能直使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成接识别,要由一种程序将汇编语

4、言翻译成机器语言,这种起翻译作用的程序叫汇编机器语言,这种起翻译作用的程序叫汇编程序(也叫汇编器),汇编程序是系统软程序(也叫汇编器),汇编程序是系统软件中语言处理系统软件。件中语言处理系统软件。4 4、什么叫汇编、什么叫汇编 汇编程序把汇编语言翻译成机器语言汇编程序把汇编语言翻译成机器语言的过程称为汇编。的过程称为汇编。共96页75 5、汇编语言程序、汇编器和机器码程序、汇编语言程序、汇编器和机器码程序之间的关系之间的关系共96页86 6、什么是伪指令、什么是伪指令 人们设计了一些专门用于指导汇编器人们设计了一些专门用于指导汇编器进行汇编工作的指令,由于这些指令不形进行汇编工作的指令,由于这

5、些指令不形成机器码指令,它们只是在汇编器进行汇成机器码指令,它们只是在汇编器进行汇编工作的过程中起作用,所以被叫做伪指编工作的过程中起作用,所以被叫做伪指令。令。7 7、什么叫宏、什么叫宏共96页9 为了提高编程效率和增强程序的可读为了提高编程效率和增强程序的可读性,有设计了一些宏。性,有设计了一些宏。8 8、什么叫汇编语言程序、什么叫汇编语言程序 用汇编语言编写的程序叫做汇编语言用汇编语言编写的程序叫做汇编语言程序。程序。9 9、什么叫目标程序、什么叫目标程序 自源程序翻译成的机器码程序就叫做自源程序翻译成的机器码程序就叫做目标程序。目标程序。共96页105.2 ARM5.2 ARM伪指令伪

6、指令 在在ARMARM汇编程序语言中,有如下几种汇编程序语言中,有如下几种伪指令:伪指令:段定义、符号定义、数据定义、数段定义、符号定义、数据定义、数据缓冲池定义、数据表定义、数据空间据缓冲池定义、数据表定义、数据空间分配、汇编控制伪指令以及其他伪指令。分配、汇编控制伪指令以及其他伪指令。5.2.1 5.2.1 段定义伪指令段定义伪指令共96页11 段定义伪指令的格式为:段定义伪指令的格式为:AREA ,AREA ,SectionnameSectionname:段名,若段名以数字开头,:段名,若段名以数字开头,则必须用符号则必须用符号“|”扩起来,如扩起来,如|1_test|1_test|。a

7、ttrattr:属性字段,多个属性字段用逗号分:属性字段,多个属性字段用逗号分隔。隔。共96页12属性属性含义含义备注备注CODECODE代码段代码段默认读默认读/写属性为写属性为READONLYREADONLYDATADATA数据段数据段默认属性为默认属性为READWRITEREADWRITEREADONLYREADONLY本段为只读本段为只读READWRITEREADWRITE本段为可读可写本段为可读可写ALIGNALIGN表达式表达式 多源文件共享段多源文件共享段ELFELF的代码段和数据段的代码段和数据段为字对齐为字对齐COMMONCOMMON多源文件共享段多源文件共享段共96页13

8、AREA Init,CODE,READONLYAREA Init,CODE,READONLY ;程序段程序段 该伪指令定义了一个代码段,段名为该伪指令定义了一个代码段,段名为InitInit,属性为只读。,属性为只读。一个汇编语言程序至少要有一个段。一个汇编语言程序至少要有一个段。5.2.2 5.2.2 符号定义伪指令符号定义伪指令 符号的命名由编程者决定,但必须遵符号的命名由编程者决定,但必须遵循以下约定:循以下约定:共96页14(1 1)符号区分大小写,同名的大、小写符)符号区分大小写,同名的大、小写符号会被编译器认为是两个不同的符号。号会被编译器认为是两个不同的符号。(2 2)符号在其作

9、用范围内必须唯一。)符号在其作用范围内必须唯一。(3 3)自定义的符号不能与系统保留字相)自定义的符号不能与系统保留字相同。同。(4 4)符号不应与指令或伪指令同名)符号不应与指令或伪指令同名1 1、定义全局变量伪指令、定义全局变量伪指令GBLAGBLA、GBLLGBLL和和GBLSGBLS共96页15 GBLA GBLA、GBLLGBLL和和GBLSGBLS伪指令用于定义一伪指令用于定义一个个ARMARM程序中的全局变量,并将其初始化。程序中的全局变量,并将其初始化。GBLA(GBLLGBLA(GBLL和和GBLS)GBLS)variblevarible为变量名称。为变量名称。GBLAGBL

10、A定义一个全局数字变量,其默认初定义一个全局数字变量,其默认初值为值为0 0。共96页16GBLLGBLL定义一个全局逻辑变量,其默认初定义一个全局逻辑变量,其默认初值为值为F F(假)。(假)。GBLSGBLS定义一个全局字符串变量,其默认定义一个全局字符串变量,其默认初值为空。初值为空。GBLA Test1 GBLA Test1 ;定义一个全局数字变量,;定义一个全局数字变量,变量名为变量名为Test1Test1GBLL Test2 GBLL Test2 ;定义一个全局逻辑变量,;定义一个全局逻辑变量,变量名为变量名为Test2Test2共96页17GBLS Test1 GBLS Test

11、1 ;定义一个全局字符串变;定义一个全局字符串变量,变量名为量,变量名为Test3Test3 全局变量的变量名在整个程序范围内全局变量的变量名在整个程序范围内必须具有唯一性。必须具有唯一性。2 2、定义局部变量位指令、定义局部变量位指令LCLALCLA、LCLLLCLL和和LCLSLCLS LCLA LCLA、LCLLLCLL和和LCLSLCLS伪指令用于定义一伪指令用于定义一个个ARMARM程序中的局部变量,并将其初始化。程序中的局部变量,并将其初始化。共96页18LCLA(LCLLLCLA(LCLL和和LCLS)LCLS)variblevarible为变量名称。为变量名称。LCLALCLA

12、定义一个局部数字变量,其默认初定义一个局部数字变量,其默认初值为值为0 0。LCLLLCLL定义一个局部逻辑变量,其默认初定义一个局部逻辑变量,其默认初值为值为F F(假)。(假)。LCLSLCLS定义一个局部字符串变量,其默认定义一个局部字符串变量,其默认初值为空。初值为空。共96页19LCLA Test4 LCLA Test4 ;定义一个局部数字变量,;定义一个局部数字变量,变量名为变量名为Test4Test4LCLL Test5 LCLL Test5 ;定义一个局部逻辑变量,;定义一个局部逻辑变量,变量名为变量名为Test5Test5LCLS Test6 LCLS Test6 ;定义一个

13、局部字符串变;定义一个局部字符串变量,变量名为量,变量名为Test6Test6 局部变量的变量名在变量作用范围内局部变量的变量名在变量作用范围内必须具有唯一性。必须具有唯一性。共96页20 在默认情况下,局部变量只在定义该在默认情况下,局部变量只在定义该变量的程序段内有效。变量的程序段内有效。3 3、变量赋值伪指令、变量赋值伪指令SETASETA、SETLSETL和和SETSSETS 伪指令伪指令SETASETA、SETLSETL和和SETSSETS用于给一个用于给一个已经定义的全局变量或局部变量进行赋值。已经定义的全局变量或局部变量进行赋值。Test1 SETA 0 xAA ;Test1 S

14、ETA 0 xAA ;将将Test1Test1变量赋值变量赋值为为0 xAA0 xAA。共96页21Test2 SETL TRUE ;Test2 SETL TRUE ;将将Test2Test2变量赋变量赋值为真。值为真。Test3 SETS Test3 SETS“TestingTesting”;将将Test3Test3变量赋变量赋值为值为“TestingTesting”。Test4 SETA 0 xBB ;Test4 SETA 0 xBB ;将将Test4Test4变量赋值变量赋值为为0 xBB0 xBB。Test5 SETL TRUE ;Test5 SETL TRUE ;将将Test5Tes

15、t5变量赋值变量赋值为真。为真。共96页22Test6 SETS Test6 SETS“TestingTesting”;将将Test6Test6变量变量赋值为赋值为“TestingTesting”。4 4、定义寄存器列表伪指令、定义寄存器列表伪指令RLISTRLIST 指令指令LDM/STMLDM/STM需要使用一个比较长的需要使用一个比较长的寄存器列表,使用伪指令寄存器列表,使用伪指令RLISTRLIST可对一个可对一个列表定义一个统一的名称。列表定义一个统一的名称。RLIST RLIST name name 为表名成;为表名成;listlist为寄存器列表。为寄存器列表。共96页23 Re

16、gList RLIST R0-R5RegList RLIST R0-R5,R8R8,R10 R10 ;将;将寄存器列表名称定义为寄存器列表名称定义为RegListRegList。列表中的寄存器访问次序根据寄存器列表中的寄存器访问次序根据寄存器的编号由低到高,而与列表中的寄存器陪的编号由低到高,而与列表中的寄存器陪列次序无关。列次序无关。5.2.3 5.2.3 程序中的标号程序中的标号 在汇编语言中用来表示地址的符号就在汇编语言中用来表示地址的符号就叫做标号。叫做标号。共96页24 LDR R0,#0 x3FF5000LDR R0,#0 x3FF5000 target1 LDR R1,0 xFF

17、 target1 LDR R1,0 xFF STR R1,R0 STR R1,R0 LDR R0,#0 x3FF5008 LDR R0,#0 x3FF5008 LDR R1,0 x01 LDR R1,0 x01 STR R1,R0 STR R1,R0 B target1 ;B target1 ;转移到转移到target1target1位置上运行位置上运行共96页25 这里的这里的target1target1就是标号。就是标号。在在ARMARM汇编中,根据用途不同标号主汇编中,根据用途不同标号主要有以下要有以下2 2种:种:(1 1)目标地址标号)目标地址标号 写在一条指令前面的标号。写在一条指

18、令前面的标号。(2 2)数据或数据区首地址标号)数据或数据区首地址标号 写在数据或数据区定义伪指令前面的写在数据或数据区定义伪指令前面的标号。标号。共96页265.2.4 5.2.4 数据定义伪指令数据定义伪指令 该指令的功能就是为指定的数据分配该指令的功能就是为指定的数据分配存储单元,以及用该数据对已分配存储单存储单元,以及用该数据对已分配存储单元进行初始化。元进行初始化。1 1、DCBDCB DCB DCB伪指令用于分配一片连续的以字伪指令用于分配一片连续的以字节为单位的存储区域,并用指定的表达式节为单位的存储区域,并用指定的表达式对其进行初始化。对其进行初始化。共96页27 DCB DC

19、B labellabel为标号,为存储区域的首地址(可为标号,为存储区域的首地址(可选)。选)。exprexpr为表达式,为从标号开始存放的数据。为表达式,为从标号开始存放的数据。该表达式可以为该表达式可以为02550255的数字或字符串。的数字或字符串。Dat1 DCB 0 x7EDat1 DCB 0 x7EDCBDCB也可用也可用“=”代替,即代替,即 Dat1=0 x7EDat1=0 x7E共96页282 2、DCWDCW(或(或DCWUDCWU)DCW DCW(或(或DCWUDCWU)伪指令用于为数据分)伪指令用于为数据分配一片连续的半字存储单元,并用表达式配一片连续的半字存储单元,并

20、用表达式对其进行初始化。对其进行初始化。DCW(DCW(或或DCWU)DCWU)用用DCWDCW分配的字存储单元是严格按半分配的字存储单元是严格按半字对齐的,而用字对齐的,而用DCWUDCWU分配的字存储单元并分配的字存储单元并不严格按半字对齐。不严格按半字对齐。共96页293 3、DCDDCD(或(或DCDUDCDU)DCD DCD(或(或DCDUDCDU)伪指令用于分配一片连)伪指令用于分配一片连续的字存储单元,并用伪指令中指定的表续的字存储单元,并用伪指令中指定的表达式初始化。达式初始化。DataTest DCW 1,2,3 ;DataTest DCW 1,2,3 ;分配一片连续的分配一

21、片连续的半字存储单元并初始化半字存储单元并初始化 DCD(DCD(或或DCDU)DCDU)共96页30 用用DCDDCD分配的字存储单元是字对齐的,分配的字存储单元是字对齐的,而用而用DCDUDCDU分配的字存储单元并不严格要求分配的字存储单元并不严格要求字对齐。字对齐。DataTest DCD 4,5,6 ;DataTest DCD 4,5,6 ;分配一片连续的分配一片连续的存储单元并初始化存储单元并初始化 DCD DCD也可用也可用“&”代替。代替。4 4、DCFDDCFD(或(或DCFDUDCFDU)共96页31 DCFD DCFD(或(或DCFDUDCFDU)伪指令用于为双精)伪指令用

22、于为双精度的浮点数分配一片连续的字存储单元,度的浮点数分配一片连续的字存储单元,并用伪指令中指定的表达式初始化。每个并用伪指令中指定的表达式初始化。每个双精度的浮点数占据两个字单元。双精度的浮点数占据两个字单元。DCFD(DCFD(或或DCFDU)DCFDU)用用DCFDDCFD分配的字存储单元是字对齐的分配的字存储单元是字对齐的而用而用DCFDUDCFDU分配的字存储单元并不严格字分配的字存储单元并不严格字对齐。对齐。共96页32 FDataTest DCFD 2E115,-5E7 ;FDataTest DCFD 2E115,-5E7 ;分配一片分配一片连续的字存储单元,并初始化为指定的双连

23、续的字存储单元,并初始化为指定的双精度数。精度数。5 5、DCFSDCFS(或(或DCFSUDCFSU)DCFS DCFS(或(或DCFSUDCFSU)伪指令用于为单精)伪指令用于为单精度的浮点数分配一片连续的字存储单元,度的浮点数分配一片连续的字存储单元,并用伪指令中指定的表达式初始化。每个并用伪指令中指定的表达式初始化。每个单精度浮点熟占据一个字单元。单精度浮点熟占据一个字单元。共96页33 DCFS(DCFS(或或DCFSU)DCFSU)用用DCFSDCFS分配的字存储单元是字对齐的分配的字存储单元是字对齐的而用而用DCFSUDCFSU分配的字存储单元并不严格字分配的字存储单元并不严格字

24、对齐。对齐。FDataTest DCFS 2E5,-5E-7;FDataTest DCFS 2E5,-5E-7;分配一片分配一片连续的字存储单元,并初始化为指定的单连续的字存储单元,并初始化为指定的单精度数。精度数。6 6、DCQDCQ(或(或DCQUDCQU)共96页34 DCQ DCQ(或(或DCQUDCQU)伪指令用于分配一片以)伪指令用于分配一片以8 8字节为单位的连续存储区域,并用伪指令字节为单位的连续存储区域,并用伪指令中指定的表达式初始化。中指定的表达式初始化。DCQ(DCQ(或或DCQU)DCQU)用用DCQDCQ分配的存储单元是字对齐的,分配的存储单元是字对齐的,而用而用DC

25、QUDCQU分配的字存储单元并不严格字对分配的字存储单元并不严格字对齐。齐。共96页35 DataTest DCQ 100 ;DataTest DCQ 100 ;分配一片连续的存分配一片连续的存储单元并初始化为指定的值。储单元并初始化为指定的值。7 7、SPACESPACE SPACE SPACE伪指令用于分配一片连续的存储伪指令用于分配一片连续的存储区域并初始化为区域并初始化为0 0。SPACE SPACE 表达式为要分配的字节数,表达式为要分配的字节数,SPACESPACE也也可用可用“%”代替。代替。共96页36 DataSpace SPACE 100;DataSpace SPACE 1

26、00;分配连续的分配连续的100100字字节的存储单元并初始化为节的存储单元并初始化为0 0。8 8、LTORGLTORG 伪指令伪指令LTORGLTORG用来说明某个存储区域用来说明某个存储区域为一个用来暂存数据的数据缓冲区,也叫为一个用来暂存数据的数据缓冲区,也叫文字迟或数据缓冲池。大的代码段也可以文字迟或数据缓冲池。大的代码段也可以使用多个数据缓冲池。使用多个数据缓冲池。共96页37 AREA example,CODE,READONLYAREA example,CODE,READONLY Start BL Func1 Start BL Func1 Func1 LDR R1,#0 x800

27、 Func1 LDR R1,#0 x800 MOV PC,LR MOV PC,LR LTORG LTORG ;定义数据缓冲池的开始位置;定义数据缓冲池的开始位置 Date SPACE 40 Date SPACE 40;数据缓冲池有;数据缓冲池有4040个被初个被初 END END ;始化为;始化为0 0的字节的字节 9 9、MAPMAP和和FIELDFIELD共96页38 在应用程序中经常使用一种如图所示在应用程序中经常使用一种如图所示的表:的表:共96页39 MAP MAP可以用可以用“”代替。代替。MAP MAP用于定义一个结构化的内存表的用于定义一个结构化的内存表的首地址。语法格式如下:

28、首地址。语法格式如下:MAP ,MAP ,exprexpr为结构化表首地址。可以为标号或为结构化表首地址。可以为标号或数字表达式。数字表达式。baseregisterbaseregister为基址寄存器(可选项)。为基址寄存器(可选项)。基址寄存器的值与基址寄存器的值与exprexpr的值之和就是表首的值之和就是表首地址。地址。共96页40MAP fun MAP fun ;funfun就是内存表的首地址就是内存表的首地址 MAP 0 x100,R9 MAP 0 x100,R9;内存表的首地址为;内存表的首地址为R9+0X100R9+0X100 MAP MAP通常和通常和FIELDFIELD伪指

29、令相配合来定义伪指令相配合来定义一个结构化的内存表。一个结构化的内存表。FIELD FIELD伪指令用于定义一个结构化内存伪指令用于定义一个结构化内存表中的数据域。表中的数据域。FIELD FIELD labellabel为标号。为标号。共96页41 exprexpr为表达式。它的值为数据域所占的字为表达式。它的值为数据域所占的字节数。节数。FIELD FIELD伪指令与伪指令与MAPMAP伪指令配合使用伪指令配合使用来定义结构化的内存表。来定义结构化的内存表。MAPMAP伪指令定义伪指令定义内存表的首地址;内存表的首地址;FIELDFIELD伪指令定义内存伪指令定义内存表中各个数据域,并可以

30、为每个数据域表中各个数据域,并可以为每个数据域指定一个标号供其他指令引用。指定一个标号供其他指令引用。共96页42 MAP 0X 100 MAP 0X 100;定义结构化内存表首地址为定义结构化内存表首地址为0X1000X100 A FIELD 16 A FIELD 16;定义定义A A的长度为的长度为1616字节,位置为字节,位置为0X1000X100 B FIELD 32 B FIELD 32;定义定义B B的长度为的长度为3232字节,位置为字节,位置为0X1100X110 S FIELD 256 S FIELD 256;定义定义S S的长度为的长度为256256字节,位置为字节,位置为

31、0X1300X130 注意:注意:MAPMAP和和FIELDFIELD伪指令仅用于定义伪指令仅用于定义数据结构,并不实际分配存储单元。数据结构,并不实际分配存储单元。FIELDFIELD也可用也可用“#”代替。代替。5.2.5 5.2.5 汇编控制伪指令汇编控制伪指令共96页431 1、IFIF、ELSEELSE和和EDNIFEDNIF IF IF、ELSEELSE和和ENDIFENDIF伪指令能根据条件伪指令能根据条件的成立与否决定是否执行某个程序段。的成立与否决定是否执行某个程序段。IF IF 逻辑表达式逻辑表达式 程序段程序段1 1ELSEELSE 程序段程序段2 2ENDIFENDIF

32、共96页44IFIF、ELSEELSE、ENDIFENDIF伪指令可以嵌套使用。伪指令可以嵌套使用。GBLL Test GBLL Test;声明一个全局逻辑变量;声明一个全局逻辑变量Test .IF Test=TRUE IF Test=TRUE 程序段程序段1 1 ELSE ELSE 程序段程序段2 2 ENDIF ENDIF2 2、WHILEWHILE和和WENDWEND共96页45 WHILE WHILE和和WENDWEND伪指令根据条件的成立与伪指令根据条件的成立与否决定是否重复汇编一个程序段。否决定是否重复汇编一个程序段。WHILE WHILE 逻辑表达式逻辑表达式 程序段程序段WEN

33、DWEND 若若WHILEWHILE后面的逻辑表达式为真,则后面的逻辑表达式为真,则重复汇编该程序段,直到逻辑表达式为假。重复汇编该程序段,直到逻辑表达式为假。共96页46 WHILE WHILE和和WENDWEND伪指令可以嵌套使用。伪指令可以嵌套使用。GBLA CounterGBLA Counter;声明一个全局数字变量声明一个全局数字变量CounterCounter SETA 3Counter SETA 3;赋值;赋值 .WHILE Counter 10 WHILE Counter 10 程序段程序段 WENDWEND5.2.6 5.2.6 其它常用的伪指令其它常用的伪指令共96页471

34、 1、定义对齐方式伪指令、定义对齐方式伪指令ALIGNALIGN 使用使用ALIGNALIGN伪指令可用添加填充字节的伪指令可用添加填充字节的方式,使当前位置实现某种对齐方式。方式,使当前位置实现某种对齐方式。ALIGN ALIGN 表达式表达式,偏移量,偏移量 对齐方式为对齐方式为2 2表达式的值表达式的值。偏移量为一个。偏移量为一个数字表达式,若使用该字段,则当前位置数字表达式,若使用该字段,则当前位置的对齐方式为的对齐方式为2 2表达式的值表达式的值+偏移量。偏移量。共96页48;指定后面的指令为;指定后面的指令为8 8字节对齐字节对齐 AREA Init,CODE,READONLY,A

35、LIGN=3AREA Init,CODE,READONLY,ALIGN=3 代码段代码段 ENDEND2 2、CODE16CODE16和和CODE32CODE32 CODE16CODE16用来表明其后的指令均为用来表明其后的指令均为1616位位ThumbThumb指令;指令;CODE32CODE32伪指令则表明其后面的伪指令则表明其后面的指令均为指令均为3232位位ARMARM指令。指令。共96页49 CODE16CODE16(或(或CODE32CODE32)AREA Init,CODE,READONLYAREA Init,CODE,READONLY .CODE32 CODE32 LDR R0

36、,#NEXT+1 LDR R0,#NEXT+1 BX R0 BX R0 CODE16 CODE16 NEXT LDR R3,#0X3FF NEXT LDR R3,#0X3FF END END共96页503 3、定义程序入口点伪指令、定义程序入口点伪指令ENTRYENTRY ENTRY ENTRY伪指令用于指定汇编程序的入口伪指令用于指定汇编程序的入口点。点。ENTRYENTRY AREA Init,CODE,READONLYAREA Init,CODE,READONLY ENTRY;ENTRY;.共96页514 4、汇编结束伪指令、汇编结束伪指令ENDEND END END伪指令用于通知编译器

37、汇编工作伪指令用于通知编译器汇编工作到此结束,不再往下汇编了。到此结束,不再往下汇编了。ENDEND AREA Init,CODE,READONLYAREA Init,CODE,READONLY END END共96页525 5、等效伪指令、等效伪指令EQUEQU EQU EQU伪指令用于为程序中的常量、标伪指令用于为程序中的常量、标号等定义一个等效的字符名字,其作用类号等定义一个等效的字符名字,其作用类似于似于C C语言中的语言中的#define#define。名称名称 EQU EQU 表达式表达式,类型,类型 EQU EQU也可用也可用“*”代替。代替。共96页53 由由EQUEQU伪指令

38、定义的字符名称,当其表伪指令定义的字符名称,当其表达式为达式为3232位常量时,可以指定表达式的数位常量时,可以指定表达式的数据类型,有以下三种类型:据类型,有以下三种类型:CODE16CODE16、CODE32CODE32和和DATADATA。Test EQU 50 Test EQU 50 ;定义标号;定义标号TestTest的值为的值为5050Addr EQU 0 x55,CODE32 Addr EQU 0 x55,CODE32;定义;定义AddrAddr的值的值为为0 x550 x55,其该处为,其该处为3232位的位的ARMARM指令指令共96页546 6、外部可引用符号声明伪指令、外

39、部可引用符号声明伪指令EXPORTEXPORT(或(或GLOBALGLOBAL)用伪指令用伪指令EXPORTEXPORT可以声明一个其他源可以声明一个其他源文件可引用的符号,这种符号也叫做外部文件可引用的符号,这种符号也叫做外部可引用符号。可引用符号。EXPORT EXPORT 符号符号 WEAKWEAK EXPORT EXPORT可用可用GLOBALGLOBAL代替。代替。共96页55 标号在程序中区分大小写,标号在程序中区分大小写,WEAKWEAK选选项声明其他的同名标号优先于该标号被引项声明其他的同名标号优先于该标号被引用。用。AREA Init,CODE,READONLYAREA In

40、it,CODE,READONLY EXPORT Stest EXPORT Stest END END7 7、IMPORTIMPORT共96页56 当在一个源文件中需要使用另外一个当在一个源文件中需要使用另外一个源文件的外部可引用符号时,在被引用的源文件的外部可引用符号时,在被引用的符号前面必须使用伪指令符号前面必须使用伪指令IMPORTIMPORT对其进行对其进行声明。声明。IMPORT IMPORT 符号符号WEAKWEAK 如果源文件声明了一个引用符号,则如果源文件声明了一个引用符号,则无论当前源文件中程序是否真正地使用无论当前源文件中程序是否真正地使用了该符号,该符号均会被加入到当前源了

41、该符号,该符号均会被加入到当前源文件的符号表中。文件的符号表中。共96页57 WEAK WEAK选项表示当前所有的源文件都选项表示当前所有的源文件都没有定义这样一个标号时,编译器也不报没有定义这样一个标号时,编译器也不报错,并在多数情况下将该标号置为错,并在多数情况下将该标号置为0 0。但该。但该标号被标号被B B或或BLBL指令所引用时,则将指令所引用时,则将B B或或BLBL指指令置为令置为NOPNOP操作。操作。AREA Init,CODE,READONLYAREA Init,CODE,READONLY IMPORT Main IMPORT Main END END共96页588 8、E

42、XTERNEXTERN EXTERN EXTERN伪指令与伪指令与IMPORTIMPORT伪指令的功能伪指令的功能基本相同,但如果当前源文件中的程序实基本相同,但如果当前源文件中的程序实际并未使用该指令,则该符号不会加入到际并未使用该指令,则该符号不会加入到当前源文件的符号表中。当前源文件的符号表中。其它与其它与IMPORTIMPORT相同。相同。9 9、GETGET(或(或INCLUDEINCLUDE)共96页59 GET GET伪指令用于将一个源文件包含到当伪指令用于将一个源文件包含到当前的源文件中,并将被包含的源问在当前前的源文件中,并将被包含的源问在当前位置进行汇编。位置进行汇编。GE

43、T GET 文件名文件名 可以使用可以使用INCLUDEINCLUDE代替代替GETGET。GET GET伪指令只能用于包含源文件,包伪指令只能用于包含源文件,包含目标文件则需要使用含目标文件则需要使用INCBININCBIN伪指令。伪指令。共96页60 AERA Init,CODE,READONLYAERA Init,CODE,READONLY GET a1.s GET a1.s GET c:a2.s GET c:a2.s END END1010、INCBININCBIN INCBIN INCBIN伪指令用于将一个目标文件或伪指令用于将一个目标文件或数据文件包含到当前的源文件中,被包含数据文

44、件包含到当前的源文件中,被包含共96页61的文件不做任何变动地存放在当前文件中,的文件不做任何变动地存放在当前文件中,编译器从其后开始继续处理。编译器从其后开始继续处理。INCBIN INCBIN 文件名文件名 AREA Init,CODE,READONLYAREA Init,CODE,READONLY INCBIN a1.dat INCBIN a1.dat INCBIN c:a2.txt INCBIN c:a2.txt END END共96页621111、RNRN RN RN伪指令用于给一个寄存器定义一个伪指令用于给一个寄存器定义一个别名,一提高程序的可读性。别名,一提高程序的可读性。名称名

45、称 RN RN 表达式表达式 名称为给寄存器定义的别名,表达式名称为给寄存器定义的别名,表达式为寄存器的编码。为寄存器的编码。Temp RN R0;Temp RN R0;将将R0R0定义一个别名定义一个别名TempTemp共96页631212、ROUTROUT ROUTROUT伪指令用于给一个局部变量定义伪指令用于给一个局部变量定义作用范围。作用范围。名称名称 ROUTROUT 在程序中未使用该伪指令时,局部变在程序中未使用该伪指令时,局部变量的作用范围为所在的量的作用范围为所在的AREAAREA;而使用;而使用ROUTROUT后,局部变量的作用范围为当前后,局部变量的作用范围为当前ROUTR

46、OUT和下和下一个一个ROUTROUT之间。之间。共96页645.3 5.3 宏与宏指令宏与宏指令5.3.1 5.3.1 宏宏1 1、MACROMACRO和和MENDMEND MACRO MACRO和和MENDMEND伪指令可以为一个程序伪指令可以为一个程序段定义一个名称。这样,在汇编语言应用段定义一个名称。这样,在汇编语言应用程序中就通过这个名称来使用它所代表的程序中就通过这个名称来使用它所代表的程序段,即当程序做汇编时,该名称将被程序段,即当程序做汇编时,该名称将被替换为其所代表的程序段。替换为其所代表的程序段。共96页65MACROMACRO$标号标号 宏名宏名$参数参数1 1,$参数参

47、数2 2,.程序段(宏定义体)程序段(宏定义体)MENDMEND$标号:主标号,宏内的所有其它标号必须标号:主标号,宏内的所有其它标号必须由主标号组成。由主标号组成。宏名:宏名称,为宏在程序中的引用名。宏名:宏名称,为宏在程序中的引用名。$参数参数1 1,$参数参数2 2:宏中可以使用的参数。:宏中可以使用的参数。共96页66 宏中的所有标号必须在前面冠以符号宏中的所有标号必须在前面冠以符号“$”。MACRO MACRO ;宏定义指令;宏定义指令$MDATA MAXNUM$NUM1,$NUM2$MDATA MAXNUM$NUM1,$NUM2;主标号,宏名,参数;主标号,宏名,参数 语句段语句段

48、$MDATD.MAY1$MDATD.MAY1 ;宏内标号;宏内标号 语句段语句段$MDATA.MAY2$MDATA.MAY2 ;宏内标号;宏内标号 语句段语句段 MEND MEND ;宏结束指令;宏结束指令共96页672 2、MEXITMEXIT MEXIT MEXIT用于从宏定义中跳转出去。用于从宏定义中跳转出去。MEXITMEXIT5.3.2 5.3.2 宏指令宏指令 在在ARMARM中,还有一种汇编器内置的无中,还有一种汇编器内置的无参数和标号宏参数和标号宏宏指令。宏指令。在汇编时,这些宏指令被替换成一条在汇编时,这些宏指令被替换成一条或两条真正的或两条真正的ARMARM或或ThumbT

49、humb指令。指令。共96页681 1、近地址读取指令、近地址读取指令ADRADR ADR ADR指令用于将一个近地址值传递到指令用于将一个近地址值传递到一个寄存器中。一个寄存器中。ADRcond,ADRcond,regreg为目标寄存器名称。为目标寄存器名称。exprexpr为表达式。该表达式通常是一个程为表达式。该表达式通常是一个程序中表示一条指令存储位置的地址标号。序中表示一条指令存储位置的地址标号。共96页69 该指令的功能是把标号所表示的地址该指令的功能是把标号所表示的地址传递到目标寄存器中。传递到目标寄存器中。汇编器在汇编时,将把汇编器在汇编时,将把ADRADR伪指令替换伪指令替换

50、成一条真正的成一条真正的ADDADD或或SUBSUB指令,以当前的指令,以当前的PCPC值减去或加上值减去或加上exprexpr与与PCPC之间的偏移量得到之间的偏移量得到标号的地址,并将其传递到目标寄存器。标号的地址,并将其传递到目标寄存器。start MOV R0,#10start MOV R0,#10 ADR R4,start ADR R4,start共96页70共96页71 由于指令由于指令ADDADD或或SUBSUB中对立即数的限制,中对立即数的限制,因此标号地址就不能距离当前指令的地址因此标号地址就不能距离当前指令的地址(PCPC)过远。对于非字对齐地址来说,其)过远。对于非字对齐

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(嵌入式系统基础第5章-ARM汇编课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|