4第四章 ARM汇编语言程序设计1451.pptx
![资源得分’ 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)
《4第四章 ARM汇编语言程序设计1451.pptx》由会员分享,可在线阅读,更多相关《4第四章 ARM汇编语言程序设计1451.pptx(75页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章第四章 ARM汇编语言程序设计汇编语言程序设计ADS1.2ADS1.2环境下的汇编语句格式环境下的汇编语句格式q1.ARM 1.ARM 汇编中汇编中,所有标号必须在一行的顶格书写所有标号必须在一行的顶格书写,其后面不要添加其后面不要添加“:”,而所有指令均不能顶格书写。,而所有指令均不能顶格书写。q2.ARM 2.ARM 汇编器对标识符大小写敏感,书写标号及汇编器对标识符大小写敏感,书写标号及指令时字母大小写要一致,在指令时字母大小写要一致,在ARM ARM 汇编程序中,一个汇编程序中,一个ARM ARM 指令、伪指令、寄存器名可以全部为大写字母,指令、伪指令、寄存器名可以全部为大写字母
2、,也可以全部为小写字母,但不要大小写混合使用也可以全部为小写字母,但不要大小写混合使用(如如果混合使用也能编译通过果混合使用也能编译通过,如如mov SP,r6mov SP,r6能编译能编译通过通过,但是但是moV SP,r6moV SP,r6则出现错误则出现错误)。q3.3.注释可以在一行的顶格书写。注释可以在一行的顶格书写。4.1伪操作伪操作 在ARM汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没没有有相相对对应应的的操操作作码码,通通常称这些特殊指令助记符为伪指令常称这些特殊指令助记符为伪指令 他们所完成的操作称为伪操作伪操作。ARM 指令系统 伪指令伪指令
3、:由汇编器处理由汇编器处理 伪伪指指令令是是由由汇汇编编器器对对源源程程序序汇汇编编期期间进行处理的间进行处理的.伪伪指指令令仅仅在在汇汇编编过过程程中中起起作作用用,一一旦汇编结束,伪指令的使命就完成。旦汇编结束,伪指令的使命就完成。指令指令 :由由ARMARM处理器执行处理器执行ARM 指令系统在在ARMARM的汇编程序中,有如下几种伪指令:的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。ARM 指令系统4.1.1 符号定义伪指令 符号定义伪指令用于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。ARM 指令系统4.1
4、.1 符号定义伪指令 常见的符号定义伪指令有如下几种:常见的符号定义伪指令有如下几种:用用于于定定义义全全局局变变量量的的GBLA、GBLL和和GBLS。用用于于定定义义局局部部变变量量的的LCLA、LCLL和和LCLS。用于对变量赋值的用于对变量赋值的SETA、SETL、SETS。为通用寄存器列表定义名称的为通用寄存器列表定义名称的RLIST。ARM 指令系统1、GBLA、GBLL和和GBLS语法格式:语法格式:GBLA(GBLL或或GBLS)全局变量名全局变量名GBLA、GBLL和和GBLS伪指令用于定义一个伪指令用于定义一个ARM程程序中的全局变量,并将其初始化。序中的全局变量,并将其初
5、始化。GBLA伪伪指指令令用用于于定定义义一一个个全全局局的的数数字字变变量量,并并初初始始化为化为0;GBLL伪伪指指令令用用于于定定义义一一个个全全局局的的逻逻辑辑变变量量,并并初初始始化为化为F(假);(假);GBLS伪伪指指令令用用于于定定义义一一个个全全局局的的字字符符串串变变量量,并并初初始化为空;始化为空;由由于于以以上上三三条条伪伪指指令令用用于于定定义义全全局局变变量量,因因此此在在整整个个程序范围内程序范围内变量名必须唯一变量名必须唯一。GBLA Test1;定义一个全局的数字变量,变量名为;定义一个全局的数字变量,变量名为Test1Test1SETA0 xaa;将该变量赋
6、值为;将该变量赋值为0 xaaGBLL Test2;定义一个全局的逻辑变量,变量名为;定义一个全局的逻辑变量,变量名为Test2Test2SETLTRUE;将该变量赋值为真;将该变量赋值为真GBLSTest3;定义一个全局的字符串变量,变量名为;定义一个全局的字符串变量,变量名为Test3Test3SETSTesting;将该变量赋值为;将该变量赋值为Testing2、LCLA、LCLL和和LCLS语法格式:语法格式:LCLA(LCLL或或LCLS)局部变量名局部变量名LCLA、LCLL和和LCLS伪指令用于定义一个伪指令用于定义一个ARM程程序中的局部变量,并将其初始化。其中:序中的局部变量
7、,并将其初始化。其中:LCLA伪伪指指令令用用于于定定义义一一个个局局部部的的数数字字变变量量,并初始化为并初始化为0;LCLL伪伪指指令令用用于于定定义义一一个个局局部部的的逻逻辑辑变变量量,并初始化为并初始化为F(假);(假);LCLS伪伪指指令令用用于于定定义义一一个个局局部部的的字字符符串串变变量量,并初始化为空;并初始化为空;以上三条伪指令用于声明局部变量以上三条伪指令用于声明局部变量ARM 指令系统使用示例:使用示例:LCLATest4 ;声声明明一一个个局局部部的的数数字字变变量量,变量名为变量名为Test4Test3SETA0 xaa ;将将该该变变量量赋赋值值为为0 xaaL
8、CLLTest5;声声明明一一个个局局部部的的逻逻辑辑变变量量,变变量名为量名为Test5Test4SETLTRUE;将将该该变变量量赋赋值值为为真真LCLSTest6;定定义义一一个个局局部部的的字字符符串串变变量量,变量名为变量名为Test6Test6SETS“Testing”;将将该该变变量量赋赋值值为为“Testing”3、SETA、SETL和和SETS语法格式:语法格式:变量名变量名SETA(SETL或或SETS)表达式)表达式 伪伪指指令令SETA、SETL、SETS给给一一个个已已经经定定义义的全局变量或局部变量赋值。的全局变量或局部变量赋值。SETA伪指令用于给一个数学变量赋值
9、;伪指令用于给一个数学变量赋值;SETL伪指令用于给一个逻辑变量赋值;伪指令用于给一个逻辑变量赋值;SETS伪指令用于给一个字符串变量赋值;伪指令用于给一个字符串变量赋值;其其中中,变变量量名名为为已已经经定定义义过过的的全全局局变变量量或局部变量,表达式为将要赋给变量的值。或局部变量,表达式为将要赋给变量的值。使用示例:使用示例:LCLA Test3;声声明明一一个个局局部部的的数字变量,变量名为数字变量,变量名为Test3Test3 SETA0 xaa;将将该该变变量量赋赋值值为为0 xaaLCLL Test4;声声明明一一个个局局部部的的逻辑变量,变量名为逻辑变量,变量名为Test4Te
10、st4 SETLTRUE;将将该该变变量赋值为真量赋值为真ARM 指令系统 4、RLIST 名称名称 RLIST 寄存器列表寄存器列表 RLIST伪伪指指令令可可用用于于对对一一个个通通用用寄寄存存器器列列表表定定义义名名称称,使使用用该该伪伪指指令令定定义义的的名名称称可可在在ARM指指令令LDM/STM中使用。中使用。在在LDM/STM指指令令中中,列列表表中中的的寄寄存存器器访访问问次次序序为为根根据据寄寄存存器器的的编编号号由由低低到到高高,而而与与列列表表中中的的寄存器排列次序无关。寄存器排列次序无关。RLIST使用示例:使用示例:RegListRLISTR0-R5,R8,R10 将
11、将寄寄存存器器列列表表名名称称定定义义为为RegList,可可在在ARM指指令令LDM/STM中中通通过过该该名名称访问寄存器列表。称访问寄存器列表。例例:RegListRLISTr1-r13;必须顶格开始写必须顶格开始写 LDMIA r0,RegList4.1.2 数据定义(数据定义(Data Definition)伪指令)伪指令 数数据据定定义义伪伪指指令令一一般般用用于于为为特特定定的的数数据据分分配配存存储储单单元元,同同时时可可完完成成已已分分配配存存储储单单元元的的初初始始化化。常常见见的的数数据据定定义义伪伪指指令令有有如如下下几几种:种:DCB 用用于于分分配配一一片片连连续续
12、的的字字节节存存储储单单元元并并用用指定的数据初始化。指定的数据初始化。DCW(DCWU)用用于于分分配配一一片片连连续续的的半半字字存存储储单元并用指定的数据初始化。单元并用指定的数据初始化。DCFD(DCFDU)用用于于为为双双精精度度的的浮浮点点数数分分配配一一片片连续的字存储单元并用指定的数据初始化。连续的字存储单元并用指定的数据初始化。ARM 指令系统DCFS(DCFSU)用用于于为为单单精精度度的的浮浮点点数数分分配配一一片片连连续续的的字字存存储储单单元元并并用用指指定定的的数数据据初始化。初始化。DCQ(DCQU)用用于于分分配配一一片片以以8字字节节为为单单位位的的连连续续的
13、的存存储储单单元元并并用用指指定定的的数数据据初初始始化。化。DCD(DCDU)用用于于分分配配一一片片连连续续的的字字存存储储单单元元并用指定的数据初始化。并用指定的数据初始化。SPACE用于分配一片连续的存储单元用于分配一片连续的存储单元MAP 用于定义一个结构化的内存表首地址用于定义一个结构化的内存表首地址FIELD 用于定义一个结构化的内存表的数据域用于定义一个结构化的内存表的数据域1 1、DCB(DCBDCB(DCB也可用也可用“=”“=”代替代替)语法格式:标号标号DCBDCB 表达式表达式 DCBDCB伪伪指指令令用用于于分分配配一一片片连连续续的的字字节节存存储储单单元元并并用
14、用伪伪指指令令中中指指定定的的表表达达式式初初始始化化。其其中中,表表达达式式可可以以为为0 0255255的的数数字或字符串。字或字符串。使用示例:使用示例:StrStr DCB DCBThis is a testThis is a test!;分配一片连续的字节存储单元并初始化。;分配一片连续的字节存储单元并初始化。2 2、DCDDCD(或(或DCDU,DCDDCDU,DCD也可用也可用“&”“&”代替)代替)语法格式:语法格式:标号标号DCDDCD(或(或DCDUDCDU)表达式表达式 DCDDCD(或或DCDUDCDU)伪伪指指令令用用于于分分配配一一片片连连续续的的字字存存储储单单元
15、元并并用用伪伪指指令令中中指指定定的的表表达达式式初初始始化化。其其中中,表表达达式式可可以以为为程程序序标标号号或或数数字字表达式。表达式。用用DCDDCD分分配配的的字字存存储储单单元元是是字字对对齐齐的的,而而用用DCDUDCDU分配的字存储单元并不严格字对齐。分配的字存储单元并不严格字对齐。使用示例:使用示例:DataTestDataTestDCDDCD4 4,5 5,6 6;分分配配一一片连续的字存储单元并初始化。片连续的字存储单元并初始化。3 3、SPACE(SPACESPACE(SPACE也可用也可用“”代替代替)语法格式:语法格式:标号标号SPACESPACE表达式表达式 SP
16、ACESPACE伪伪指指令令用用于于分分配配一一片片连连续续的的存存储储区区域域并并初初始始化化为为0 0。其其中中,表表达式为要分配的字节数。达式为要分配的字节数。使用示例:使用示例:DataSpaceDataSpaceSPACESPACE100100;分分配配连连续续100100字节的存储单元并初始化为字节的存储单元并初始化为0 0。4 4、MAP,MAPMAP,MAP也可用也可用“”代替。代替。语法格式:语法格式:MAPMAP表达式表达式,基址寄存器,基址寄存器 MAPMAP伪伪指指令令用用于于定定义义一一个个结结构构化化的的内内存表的首地址。存表的首地址。表表达达式式可可以以为为程程序
17、序中中的的标标号号或或数数学学表表达达式式,基基址址寄寄存存器器为为可可选选项项,当当基基址址寄寄存存器器选选项项不不存存在在时时,表表达达式式的的值值即即为为内内存存表表的的首首地地址址,当当该该选选项项存存在在时时,内内存存表表的的首首地地址址为为表表达达式式的的值值与与基基址址寄寄存存器的和。器的和。MAPMAP伪伪指指令令通通常常与与FIELDFIELD伪伪指指令令配合使用来定义结构化的内存表。配合使用来定义结构化的内存表。使用示例:使用示例:MAPMAP0 x1000 x100,R0R0;定定义义结结构构化内存表首地址的值为化内存表首地址的值为0 x1000 x100R0R0。5 5
18、、FILED FILEDFILED FILED也可用也可用“#”“#”代替。代替。语法格式:语法格式:标号标号FIELDFIELD表达式表达式 FIELDFIELD伪伪指指令令用用于于定定义义一一个个结结构构化化内内存表中的数据域。存表中的数据域。表表达达式式的的值值为为当当前前数数据据域域在在内内存存表表中所占的字节数。中所占的字节数。FIELDFIELD伪伪指指令令常常与与MAPMAP伪伪指指令令配配合合使使用用来来定定义义结结构构化化的的内内存存表表。MAPMAP伪伪指指令令定定义义内内存存表表的的首首地地址址,FIELDFIELD伪伪指指令令定定义义内内存存表表中中的的各各个个数数据据
19、域域,并并可可以以为为每个数据域指定一个标号供其他的指令引用。每个数据域指定一个标号供其他的指令引用。注注意意 MAPMAP和和FIELDFIELD伪伪指指令令仅仅用用于于定定义义数数据据结结构,并不实际分配存储单元。构,并不实际分配存储单元。使用示例:使用示例:MAP MAP0 x1000 x100;定定义义结结构构化化内内存存表首地址的值为表首地址的值为0 x1000 x100。A AFIELDFIELD1616;定定义义A A的的长长度度为为1616字节,位置为字节,位置为0 x1000 x100B BFIELDFIELD3232;定定义义B B的的长长度度为为3232字节,位置为字节,
20、位置为0 x1100 x110S SFIELDFIELD256256;定定义义S S的的长长度度为为256256字节,位置为字节,位置为0 x1300 x130 s3c44b0 x ARM s3c44b0 x ARM芯片的初始化源程序芯片的初始化源程序:AREA RamData,DATA,READWRITE AREA RamData,DATA,READWRITE (_IRQ_BASEADDRESS);(_IRQ_BASEADDRESS);即即 MAPMAPHandleReset#4 ;#HandleReset#4 ;#即即 DCD DCDHandleUndef#4HandleUndef#4Ha
21、ndleSWI#4HandleSWI#4HandlePabort#4HandlePabort#4HandleDabort#4HandleDabort#4HandleReserved#4HandleReserved#4HandleIRQ#4HandleIRQ#4HandleFIQ#4HandleFIQ#44.1.3 汇编控制伪指令汇编控制伪指令 汇汇编编控控制制伪伪指指令令用用于于控控制制汇汇编编程序的执行流程程序的执行流程常用的汇编控制伪指令包括常用的汇编控制伪指令包括:IF、ELSE、ENDIFWHILE、WENDMACRO、MENDMEXITARM 指令系统1 IF1 IF、ELSEELS
22、E、ENDIF(ENDIF(等价于等价于|)语法格式:语法格式:IFIF逻辑表达式逻辑表达式指令序列指令序列1 1ELSEELSE指令序列指令序列2 2ENDIFENDIF IFIF、ELSEELSE、ENDIFENDIF伪伪指指令令能能根根据据条条件件的的成成立立与与否否决决定定是是否否执执行行某某个个指指令令序序列列。当当IFIF后后面面的的逻逻辑辑表表达达式式为为真真,则则执执行行指指令令序序列列1 1,否否则则执执行行指指令令序序列列2 2。其其中中,ELSEELSE及及指指令令序序列列2 2可可以以没没有有,此此时时,当当IFIF后后面面的的逻逻辑辑表表达达式式为为真真,则则执执行行
23、指指令令序序列列1 1,否则继续执行后面的指令。,否则继续执行后面的指令。IFIF、ELSEELSE、ENDIFENDIF伪指令可以嵌套使用。伪指令可以嵌套使用。使用示例:使用示例:GBLL Test;声明一个全局的逻辑变量,变量名为;声明一个全局的逻辑变量,变量名为Test IF Test=TRUE指令序列指令序列1 ELSE指令序列指令序列2 ENDIF s3c44b0 x ARM s3c44b0 x ARM芯片的初始化源程序芯片的初始化源程序:GBLL THUMBCODE GBLL THUMBCODE;global logical variable,init.to false;globa
24、l logical variable,init.to false CONFIG=16 CONFIG=16 ;=if=if,CONFIG:build-in variable defined by ARM,CONFIG:build-in variable defined by ARM;assembler,16=assembing Thumbcode.;assembler,16=assembing Thumbcode.THUMBCODE SETLTHUMBCODE SETLTRUE ;SETL:set the logic variableTRUE ;SETL:set the logic variab
25、le CODE32 ;changing from Thumb state to Arm state CODE32 ;changing from Thumb state to Arm state|;|;|=else|=elseTHUMBCODE SETLTHUMBCODE SETLFALSEFALSE ;=endif=endif2 2、WHILEWHILE、WENDWEND语法格式:语法格式:WHILEWHILE逻辑表达式逻辑表达式指令序列指令序列WENDWEND WHILEWHILE、WENDWEND伪指令可以嵌套使用。伪指令可以嵌套使用。WHILEWHILE、WENDWEND伪伪指指令令能能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 4第四章 ARM汇编语言程序设计1451 第四 ARM 汇编语言 程序设计 1451
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内