第3章ARM指令集_第1页
第3章ARM指令集_第2页
第3章ARM指令集_第3页
第3章ARM指令集_第4页
第3章ARM指令集_第5页
已阅读5页,还剩127页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 ARM指令集3. .1 ARM指令集概述指令集概述3. .2 ARM寻址方式寻址方式3. .3 ARM指令详细介绍指令详细介绍 第三章 ARM指令集3. .1 ARM指令集概述指令集概述3. .2 ARM寻址方式寻址方式3. .3 ARM指令详细介绍指令详细介绍 3.1 ARM指令集概述 ARMARM指令集是指令集是3232位的,程序的启动都是从位的,程序的启动都是从ARMARM指令集开始。所有的指令集开始。所有的ARMARM指令集都可以是有指令集都可以是有条件执行的。本节从以下三个方面介绍:条件执行的。本节从以下三个方面介绍:3.1.1 3.1.1 指令集编码指令集编码 3.1.2

2、3.1.2 条件执行条件执行 3.1.3 3.1.3 指令分类及指令格式指令分类及指令格式 3.1 ARM指令集概述 ARMARM指令集是指令集是3232位的,程序的启动都是从位的,程序的启动都是从ARMARM指令集开始。所有的指令集开始。所有的ARMARM指令集都可以是有指令集都可以是有条件执行的。本节从以下三个方面介绍:条件执行的。本节从以下三个方面介绍:3.1.1 3.1.1 指令集编码指令集编码 3.1.2 3.1.2 条件执行条件执行 3.1.3 3.1.3 指令分类及指令格式指令分类及指令格式 3.1.1 ARM指令集编码 ARM ARM指令集是以指令集是以3232位二进制编码的方

3、式给出位二进制编码的方式给出的,大部分的指令编码中定义了第一操作数、的,大部分的指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现的二进制位。及每条指令所对应的不同功能实现的二进制位。 每条每条3232位位ARMARM指令都具有不同的二进制编码指令都具有不同的二进制编码方式和不同的指令功能相对应方式和不同的指令功能相对应 。编码表如下:编码表如下:987654321019 18 1701111213141516202122232425262731 30 29 28987654321019 18 170 01

4、111213141516202122232425262731 30 29 28010010CPCPoffset110111SS0DDDHH0000101111111GRmGRmoffsetRmRnRmRmRm010CRnCRnRnRnRnRnRn1RnRdHiRdRn11Ignored by processor1111condCP#RdLCP Opc0111condCP#CRdCP Opc0111condCP#CRdLWNUP011condOffsetL101condRegister ListLWSUP001cond110condoffsetRdLWBUP110condoffsetRdLW1U

5、P000cond0RdLW0UP000cond11111101001000cond0Rd00B01000condRnRdLoSAU10000condRsRnSA000000condoperand 2RdSopcode100cond数据处理数据处理/PSR/PSR状态转换状态转换半字存取寄存器偏移半字存取寄存器偏移半字存取立即数偏移半字存取立即数偏移单数据存取单数据存取未定义未定义数据块存取数据块存取分支分支协处理器数据存取协处理器数据存取协处理器数据操作协处理器数据操作协处理器寄存器传送协处理器寄存器传送软中断软中断乘法乘法长乘长乘数据交换数据交换分支与交换分支与交换3.1.1 ARM指令集编

6、码3.1 ARM指令集概述 ARMARM指令集是指令集是3232位的,程序的启动都是从位的,程序的启动都是从ARMARM指令集开始。所有的指令集开始。所有的ARMARM指令集都可以是有指令集都可以是有条件执行的。本节从以下三个方面介绍:条件执行的。本节从以下三个方面介绍:3.1.1 3.1.1 指令集编码指令集编码 3.1.2 3.1.2 条件执行条件执行 3.1.3 3.1.3 指令分类及指令格式指令分类及指令格式 3.1.2 条件执行1 1、ARMARM指令根据指令根据CPSRCPSR中的条件位自动判断是否中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则执行指令,在条件满足时,

7、指令执行,否则指令被忽略,即相当于执行一条空操作指令。指令被忽略,即相当于执行一条空操作指令。2 2、在、在ARMARM的指令编码表中,统一占用编码的最的指令编码表中,统一占用编码的最高四位高四位3131:2828来表示来表示“条件码条件码”(即(即“condcond”)。)。 条件域表条件域表1条件码条件码后缀后缀标标 志志含含 义义0000EQZ置位置位相等相等0001NEZ清零清零不相等不相等0010CSC置位置位无符号数高于或等于无符号数高于或等于0011CCC清零清零无符号数低于无符号数低于0100MIN置位置位负数负数0101PLN清零清零正数或零正数或零0110VSV置位置位溢出

8、溢出0111VCV清零清零未溢出未溢出3.1.2 条件执行条件域表条件域表2条件码条件码 后缀后缀标标 志志含含 义义1001LSC清零清零Z置位置位无符号数低于或等于无符号数低于或等于1010GEN等于等于V有符号数大于或等于有符号数大于或等于1011LTN不等于不等于V有符号数小于有符号数小于1100GTZ清零且清零且N等于等于V有符号数大于有符号数大于1101LEZ置位且置位且N不等于不等于V有符号数小于或等于有符号数小于或等于1110AL总是(默认)总是(默认)无条件执行无条件执行1000HIC置位置位Z清零清零无符号数高于无符号数高于1111NV从不(未使用)从不(未使用)无无3.1

9、.2 条件执行3.1 ARM指令集概述 ARMARM指令集是指令集是3232位的,程序的启动都是从位的,程序的启动都是从ARMARM指令集开始。所有的指令集开始。所有的ARMARM指令集都可以是有指令集都可以是有条件执行的。本节从以下三个方面介绍:条件执行的。本节从以下三个方面介绍:3.1.1 3.1.1 指令集编码指令集编码 3.1.2 3.1.2 条件执行条件执行 3.1.3 3.1.3 指令分类及指令格式指令分类及指令格式 3.1.3 指令分类及指令格式1 1、指令分类简述、指令分类简述 ARMARM指令集是指令集是Load/StoreLoad/Store型的,只能通过型的,只能通过Lo

10、ad/StoreLoad/Store指令实现对系统存储器的访问,而其他类型的指令是指令实现对系统存储器的访问,而其他类型的指令是基于处理器内部的寄存器操作完成。基于处理器内部的寄存器操作完成。 ARMARM指令集可以分为六大类:指令集可以分为六大类: 数据处理指令数据处理指令 Load/StoreLoad/Store指令指令 跳转指令跳转指令 程序状态寄存器处理指令程序状态寄存器处理指令 协处理器指令协处理器指令 异常产生指令异常产生指令2 2、指令格式、指令格式 opcodecondS Rd, ,Rn, ,operand2 3 3、基本指令格式说明、基本指令格式说明(1)opcode:操作码

11、;指令助记符,如操作码;指令助记符,如LDR、STR等。等。(2)cond:可选的条件码;执行条件,如可选的条件码;执行条件,如EQ、NE等。等。(3)S:可选后缀;若指定可选后缀;若指定“S”,则根据指令执行结果,则根据指令执行结果更新更新CPSR中的条件码。中的条件码。(4)Rd:目标寄存器。目标寄存器。(5)Rn:存放第存放第1操作数的寄存器。操作数的寄存器。(6)operand2:第第2个操作数。个操作数。3.1.3 指令分类及指令格式4 4、指令格式使用举例、指令格式使用举例 LDRLDRR0,R1R0,R1;将;将R1R1所指地址单元中的数据所指地址单元中的数据;送到;送到R0R0

12、中,执行条件中,执行条件ALAL BEQBEQDATAEVENDATAEVEN;执行条件分支指令,执行条;执行条件分支指令,执行条;件;件EQEQ,即相等则跳转到目标,即相等则跳转到目标;DATEVENDATEVEN处处 ADDSADDSR2,R1,#1R2,R1,#1;加法指令,;加法指令,R2R1+1R2R1+1,影响,影响;CPSRCPSR寄存器寄存器(S)(S) SUBNESSUBNESR2,R1,#0 x20R2,R1,#0 x20 ;执行条件减法运算,执行条;执行条件减法运算,执行条;件;件NENE,R2R1-R2R1- 0 x200 x20,影响,影响;CPSRCPSR寄存器寄存

13、器(S)(S)3.1.3 指令分类及指令格式第三章 ARM指令集3. .1 ARM指令集概述指令集概述3. .2 ARM寻址方式寻址方式3. .3 ARM指令详细介绍指令详细介绍 3.2 ARM寻址方式3.2.1 3.2.1 立即寻址立即寻址3.2.2 3.2.2 寄存器寻址寄存器寻址3.2.3 3.2.3 寄存器间接寻址寄存器间接寻址3.2.4 3.2.4 基址加偏址寻址基址加偏址寻址 3.2.5 3.2.5 堆栈寻址堆栈寻址 3.2.6 3.2.6 块拷贝寻址块拷贝寻址 3.2.7 3.2.7 相对寻址相对寻址 3.2 ARM寻址方式3.2.1 3.2.1 立即寻址立即寻址3.2.2 3.

14、2.2 寄存器寻址寄存器寻址3.2.3 3.2.3 寄存器间接寻址寄存器间接寻址3.2.4 3.2.4 基址加偏址寻址基址加偏址寻址 3.2.5 3.2.5 堆栈寻址堆栈寻址 3.2.6 3.2.6 块拷贝寻址块拷贝寻址 3.2.7 3.2.7 相对寻址相对寻址 3.2.1 立即寻址1 1、立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数、立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。操作数被称为立即数,对应的寻址方式也就

15、叫做立即寻址。 例:例: ADDADDR0R0,R0R0,# #1 1;R0R0+1R0R0+1 ADDADDR0R0,R0R0,# #0 x3f0 x3f;R0R0+0 x3fR0R0+0 x3f2 2、在以上两条指令中,第二个源操作数即为立即数,要求以、在以上两条指令中,第二个源操作数即为立即数,要求以“#”#”为前缀,对于以十六进制表示的立即数,还要求在为前缀,对于以十六进制表示的立即数,还要求在“#”#”后加后加上上“0 x”0 x”或或“&”&”;在;在“#”#”后加后加“0b”0b”表示二进制数;在表示二进制数;在“#”#”后加后加“0d”0d”或缺省时表示十进制数。或缺省时表示十

16、进制数。在在3232位指令编码中存放位指令编码中存放3232位立即数的方法是:位立即数的方法是:在在ARMARM数据处理指令中,当参与操作的第二操作数据处理指令中,当参与操作的第二操作数为立即数型时,每个立即数都是采用一个数为立即数型时,每个立即数都是采用一个8 8位的常位的常数循环右移偶数位而间接得到。数循环右移偶数位而间接得到。 其中循环右移的位其中循环右移的位数由一个数由一个4 4位二进制的两倍来表示,如果立即数记作位二进制的两倍来表示,如果立即数记作,8 8位常数记作位常数记作immed_8immed_8, 4 4位的循环右位的循环右移值记作移值记作rotate_immrotate_i

17、mm,有效的立即数是由一个,有效的立即数是由一个8 8位的位的立即数循环右移偶数位得到。立即数循环右移偶数位得到。 有效立即数有效立即数immediateimmediate可以表示成:可以表示成:=immed_8=immed_8循环右移(循环右移(2 2rotate_immrotate_imm)3.2.1 立即寻址3、有效立即数问题、有效立即数问题23cond22212019181716151413121110 9 8 7 6 5 4 3 2 1 031302928272625240 0opcodeSRnRdoperand 2#目的寄存器目的寄存器第一操作数寄存器第一操作数寄存器设置条件码设置

18、条件码算术算术/逻辑功能逻辑功能# rot8bit immediate# shiftSh 0RmRsSh 1Rm010118 70117 6 5 4 30118 7 6 5 4 30立即数对齐立即数对齐立即数移位长度立即数移位长度移位类型移位类型第二操作数寄存器第二操作数寄存器寄存器移位长度寄存器移位长度25253.2.1 立即寻址3、有效立即数问题、有效立即数问题数据处理指令二进制编码数据处理指令二进制编码3.2.1 立即寻址3、有效立即数问题、有效立即数问题例:例:.global _start.text_start:MOVR0,#0 x0000F200MOVR1,#0 x00110000M

19、OVR4,#0 x00012800ADDSR2,R1,R0BGEherestop:Bstophere:SUBR3,R4,R1.end问题:问题:0 x1010、0 x001020和和x0FF1000 、0 x3FC、0 xF0000001等常数是等常数是不是合法的立即数?不是合法的立即数?;由;由0 xF2循环右移循环右移24(212)得到得到;由;由0 x11循环右移循环右移16(28)得到得到;由;由0 x4A循环右移循环右移22(211)得到得到3.2 ARM寻址方式3.2.1 3.2.1 立即寻址立即寻址3.2.2 3.2.2 寄存器寻址寄存器寻址3.2.3 3.2.3 寄存器间接寻址

20、寄存器间接寻址3.2.4 3.2.4 基址加偏址寻址基址加偏址寻址 3.2.5 3.2.5 堆栈寻址堆栈寻址 3.2.6 3.2.6 块拷贝寻址块拷贝寻址 3.2.7 3.2.7 相对寻址相对寻址 3.2.2 寄存器寻址 寄存器寻址就是利用寄存器中的数值作寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高常采用的一种方式,也是一种执行效率较高的寻址方式。的寻址方式。 例:例: ADDADDR0R0,R1R1,R2R2;R0R1R0R1R2R2 该指令的执行效果是将寄存器该指令的执行效果是将寄存器R

21、1R1和和R2R2的的内容相加,其结果存放在寄存器内容相加,其结果存放在寄存器R0R0中。中。1 1、第二操作数为寄存器型的移位操作、第二操作数为寄存器型的移位操作 在在ARMARM指令的数据处理指令中参与操作的第二操作指令的数据处理指令中参与操作的第二操作数为寄存器型时,数为寄存器型时, 在执行寄存器寻址操作时,可以选在执行寄存器寻址操作时,可以选择是否对第二操作数进行移位,即择是否对第二操作数进行移位,即RmRm,其,其中中RmRm称为第二操作数寄存器,称为第二操作数寄存器,用来指定移位类用来指定移位类型(型(LSLLSL,LSRLSR,ASLASL,ASRASR,RORROR或或RRXR

22、RX)和移位位数。)和移位位数。移位位数可以是移位位数可以是 5 5 位立即数(位立即数(#)或者是寄存)或者是寄存器(器(RsRs)。)。 在指令执行时将移位后的内容作为第二操在指令执行时将移位后的内容作为第二操作数参与运算。作数参与运算。 例:例: ADD R3ADD R3, ,R2R2, ,R1R1, ,LSRLSR #2#2 ;R3R3R2+R1R2+R14 43.2.2 寄存器寻址0 x000000550 x00000055R3R3R1R1 0 x000000200 x000000200 x000000150 x00000015R2R2ADD R3,R2,ADD R3,R2,R1,L

23、SRR1,LSR #2#20 x0000001D0 x0000001D逻辑右移逻辑右移2 2位位+ +0 x000000080 x00000008R1R12 2、第二操作数移位方式、第二操作数移位方式 LSLLSL:逻辑左移,空出的最低有效位用逻辑左移,空出的最低有效位用0 0填充。填充。LSRLSR:逻辑右移,空出的最高有效位用逻辑右移,空出的最高有效位用0 0填充。填充。ASLASL:算术左移,由于左移空出的有效位用算术左移,由于左移空出的有效位用0 0填充,因此它与填充,因此它与LSLLSL同同义。义。ASRASR:算术右移,算术移位的对象是带符号数,移位过程中必须保算术右移,算术移位的

24、对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,空出的最高有持操作数的符号不变。如果源操作数是正数,空出的最高有效位用效位用0 0填充,如果是负数用填充,如果是负数用1 1填充。填充。 RORROR:循环右移,移出的字的最低有效位依次填入空出的最高有效循环右移,移出的字的最低有效位依次填入空出的最高有效位。位。RRXRRX:带扩展的循环右移。带扩展的循环右移。 将寄存器的内容循环右移将寄存器的内容循环右移1 1位,空位用位,空位用原来原来C C标志位填充。标志位填充。3.2.2 寄存器寻址LSL #50000031000000310LSR #5000000 0310AS

25、R #5,positive operand111111 1310ASR #5,negative operand310ROR #5C310RRXCC3.2.2 寄存器寻址3 3、第二操作数的移位位数、第二操作数的移位位数 移位位数可以用立即数方式或者寄存器方式给出。移位位数可以用立即数方式或者寄存器方式给出。 例:例:ADD R3ADD R3, ,R2R2, ,R1R1, ,LSR #2LSR #2 ;R3R3R2+R1R2+R14 4ADD R3ADD R3, ,R2R2, ,R1R1, ,LSR R4LSR R4 ;R3R3R2+R1R2+R12 2R4R4 寄存器寄存器R1R1的内容分别逻

26、辑右移的内容分别逻辑右移2 2位、位、R4R4位(即位(即R1R14 4、R1R12 2R4R4),再与寄存器),再与寄存器R2R2的内容相加,结果放入的内容相加,结果放入R3R3中。中。3.2.2 寄存器寻址3.2 ARM寻址方式3.2.1 3.2.1 立即寻址立即寻址3.2.2 3.2.2 寄存器寻址寄存器寻址3.2.3 3.2.3 寄存器间接寻址寄存器间接寻址3.2.4 3.2.4 基址加偏址寻址基址加偏址寻址 3.2.5 3.2.5 堆栈寻址堆栈寻址 3.2.6 3.2.6 块拷贝寻址块拷贝寻址 3.2.7 3.2.7 相对寻址相对寻址 3.2.3 寄存器间接寻址 寄存器间接寻址就是以

27、寄存器中的值作为操寄存器间接寻址就是以寄存器中的值作为操作数的地址,作数的地址, 而操作数本身存放在存储器中。而操作数本身存放在存储器中。 例:例: LDRLDRR0R0,R1R1;R0R1R0R1 STRSTRR0R0,R1R1;R1R0R1R0第一条指令将以第一条指令将以R1R1的值为地址的存储器中的的值为地址的存储器中的数据传送到数据传送到R0R0中。第二条指令将中。第二条指令将R0R0的值传送到以的值传送到以R1R1的值为地址的存储器中。的值为地址的存储器中。0 x000000550 x00000055R0R0R1R1 0 x400000000 x400000000 x000000AA

28、0 x000000AA0 x400000000 x40000000存储器存储器寄存器寄存器LDR R0,LDR R0,R1R10 x000000AA0 x000000AA3.2 ARM寻址方式3.2.1 3.2.1 立即寻址立即寻址3.2.2 3.2.2 寄存器寻址寄存器寻址3.2.3 3.2.3 寄存器间接寻址寄存器间接寻址3.2.4 3.2.4 基址加偏址寻址基址加偏址寻址 3.2.5 3.2.5 堆栈寻址堆栈寻址 3.2.6 3.2.6 块拷贝寻址块拷贝寻址 3.2.7 3.2.7 相对寻址相对寻址 3.2.4 基址加偏址寻址 基址变址寻址就是将寄存器(该寄存器一般称作基基址变址寻址就是

29、将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令问某基地址附近的地址单元。采用变址寻址方式的指令又可以分为以下几种形式:又可以分为以下几种形式:前变址模式:前变址模式: LDR R0LDR R0, ,R1R1, ,0 044;R0R0R1+4R1+4自动变址模式:自动变址模式: LDR R0,R1,LDR R0,R1,0404!;R0R1+4R0R1+4、R1R1+4R1R1+

30、4后变址模式:后变址模式: LDR R0,R1,LDR R0,R1,0404;R0R1R0R1、R1R1+4R1R1+40 x000000550 x00000055R0R0R1R1 0 x400000000 x400000000 x000000AA0 x000000AA0 x400000040 x40000004LDR R0,R1,#04LDR R0,R1,#040 x000000AA0 x000000AA将将R1+#04R1+#04作为作为地址装载数据地址装载数据前变址模式前变址模式0 x000000550 x00000055R0R0R1R1 0 x400000000 x400000000

31、x000000AA0 x000000AA0 x400000040 x40000004LDR R0,R1,#04LDR R0,R1,#04!0 x000000AA0 x000000AA将将R1+#04R1+#04作为作为地址装载数据地址装载数据自动变址模式自动变址模式0 x400000040 x40000004再将再将R1R1的的内容内容加上加上#04#040 x000000550 x00000055R0R0R1R1 0 x400000000 x400000000 x000000BB0 x000000BB0 x400000000 x40000000LDR R0,R1,#04LDR R0,R1,#

32、040 x000000BB0 x000000BB将将R1R1作为地作为地址装载数据址装载数据后变址模式后变址模式0 x400000040 x40000004再将再将R1R1的的内容内容加上加上#04#04 基址寄存器的地址偏移可以是一个立即数,也可以基址寄存器的地址偏移可以是一个立即数,也可以是另一个寄存器,并且在加到基址寄存器前还可以经过是另一个寄存器,并且在加到基址寄存器前还可以经过移位操作。移位操作。 例:例:LDR R0, ,R1, ,R2 ;R0mem32R1+R2LDR R0, ,R1, ,R2, ,LSL #2;R0R1+R2*4常用的是立即数偏移的形式,地址偏移为寄存器形常用的

33、是立即数偏移的形式,地址偏移为寄存器形式的指令很少使用。式的指令很少使用。3.2.4 基址加偏址寻址3.2 ARM寻址方式3.2.1 3.2.1 立即寻址立即寻址3.2.2 3.2.2 寄存器寻址寄存器寻址3.2.3 3.2.3 寄存器间接寻址寄存器间接寻址3.2.4 3.2.4 基址加偏址寻址基址加偏址寻址 3.2.5 3.2.5 堆栈寻址堆栈寻址 3.2.6 3.2.6 块拷贝寻址块拷贝寻址 3.2.7 3.2.7 相对寻址相对寻址 3.2.5 堆栈寻址1 1、堆栈是一种数据结构,按先进后出(、堆栈是一种数据结构,按先进后出(First In Last First In Last OutO

34、ut,FILOFILO)的方式工作,使用一个称作堆栈指针)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。指向栈顶。2 2、当堆栈指针指向最后压入堆栈的数据时,称为满堆、当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(栈(Full StackFull Stack),而当堆栈指针指向下一个将要),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆 栈(放入数据的空位置时,称为空堆 栈(Empty Empty StackStack)。)。3 3、即访问存储器时,存储器的地址向高地址方向生长,、即访问存储器时,存储

35、器的地址向高地址方向生长,称为递增堆栈(称为递增堆栈(ascending stackascending stack)。存储器的地)。存储器的地址向低地址方向生长,称为递减堆栈(址向低地址方向生长,称为递减堆栈(descending descending stackstack)。)。栈顶栈顶SP栈顶栈顶SP栈底栈底空堆栈空堆栈栈底栈底满堆栈满堆栈0 x123456780 x123456780 x123456780 x12345678栈顶栈顶SP0 x123456780 x12345678栈顶栈顶SP压栈压栈压栈压栈3.2.5 堆栈寻址1 1、堆栈是一种数据结构,按先进后出(、堆栈是一种数据结构,

36、按先进后出(First In Last First In Last OutOut,FILOFILO)的方式工作,使用一个称作堆栈指针)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。指向栈顶。2 2、当堆栈指针指向最后压入堆栈的数据时,称为满堆、当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(栈(Full StackFull Stack),而当堆栈指针指向下一个将要),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆 栈(放入数据的空位置时,称为空堆 栈(Empty Empty StackStack)。)。

37、3 3、即访问存储器时,存储器的地址向高地址方向生长,、即访问存储器时,存储器的地址向高地址方向生长,称为递增堆栈(称为递增堆栈(ascending stackascending stack)。存储器的地)。存储器的地址向低地址方向生长,称为递减堆栈(址向低地址方向生长,称为递减堆栈(descending descending stackstack)。)。向下向下增加增加向上向上增加增加栈底栈底栈顶栈顶栈区栈区SP堆栈存堆栈存储区储区栈顶栈顶栈底栈底栈区栈区SP0 x123456780 x123456780 x123456780 x12345678堆栈压栈堆栈压栈堆栈压栈堆栈压栈3.2.5 堆

38、栈寻址四种类型的堆栈工作方式:四种类型的堆栈工作方式:1、满递增堆栈:、满递增堆栈:堆栈指针指向最后压入的数据,且由堆栈指针指向最后压入的数据,且由 低地址向高地址生成。低地址向高地址生成。LDMFA STMFA2、满递减堆栈:、满递减堆栈:堆栈指针指向最后压入的数据,且由堆栈指针指向最后压入的数据,且由 高地址向低地址生成。高地址向低地址生成。 LDMFD STMFD3、空递增堆栈:、空递增堆栈:堆栈指针指向下一个将要放入数据的空位堆栈指针指向下一个将要放入数据的空位 置,且由低地址向高地址生成。置,且由低地址向高地址生成。 LDMEA STMEA4 4、空递减堆栈:、空递减堆栈:堆栈指针指

39、向下一个将要放入数据的空位堆栈指针指向下一个将要放入数据的空位 置,且由高地址向低地址生成。置,且由高地址向低地址生成。 LDMED STMED3.2 ARM寻址方式3.2.1 3.2.1 立即寻址立即寻址3.2.2 3.2.2 寄存器寻址寄存器寻址3.2.3 3.2.3 寄存器间接寻址寄存器间接寻址3.2.4 3.2.4 基址加偏址寻址基址加偏址寻址 3.2.5 3.2.5 堆栈寻址堆栈寻址 3.2.6 3.2.6 块拷贝寻址块拷贝寻址 3.2.7 3.2.7 相对寻址相对寻址 3.2.6 块拷贝寻址1 1、块拷贝寻址是多寄存器传送指令、块拷贝寻址是多寄存器传送指令LDM/STMLDM/ST

40、M的寻址方式。的寻址方式。LDM/STMLDM/STM指令可以把存储器中的一个数据块加载到指令可以把存储器中的一个数据块加载到多个寄存器中,也可以把多个寄存器中的内容保存多个寄存器中,也可以把多个寄存器中的内容保存到存储器中。寻址操作中的寄存器可以是到存储器中。寻址操作中的寄存器可以是R0-R15R0-R15这这1616个寄存器的子集或是所有寄存器。个寄存器的子集或是所有寄存器。2 2、LDM/STMLDM/STM指令依据其后缀名的不同其寻址的方式也有指令依据其后缀名的不同其寻址的方式也有很大不同。很大不同。0 x400000000 x40000000R1R1R2R20 x?0 x?0 x01

41、0 x010 x400000000 x400000000 x?0 x?R3R3R4R40 x?0 x?R6R60 x?0 x?0 x020 x020 x030 x030 x040 x040 x400000040 x400000040 x400000080 x400000080 x4000000C0 x4000000C存储器存储器LDM R1!,R2-R4,R6LDM R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010多寄存器多寄存器loadload和和storestore指令的堆栈和块拷贝对照指令的堆栈和块拷贝对照递增递增递减递减满满空空满满空空增值增值先

42、增先增STMIBSTMIBSTMFASTMFALDMIBLDMIBLDMEDLDMED后增后增STMIASTMIASTMEASTMEALDMIALDMIALDMFDLDMFD减值减值先减先减LDMDBLDMDBLDMEALDMEASTMDBSTMDBSTMFDSTMFD后减后减LDMDALDMDALDMFALDMFASTMDASTMDASTMEDSTMED3.2.6 块拷贝寻址3.2 ARM寻址方式3.2.1 3.2.1 立即寻址立即寻址3.2.2 3.2.2 寄存器寻址寄存器寻址3.2.3 3.2.3 寄存器间接寻址寄存器间接寻址3.2.4 3.2.4 基址加偏址寻址基址加偏址寻址 3.2.

43、5 3.2.5 堆栈寻址堆栈寻址 3.2.6 3.2.6 块拷贝寻址块拷贝寻址 3.2.7 3.2.7 相对寻址相对寻址 3.2.7 相对寻址 与基址变址寻址方式相类似,相对寻址以程序计数与基址变址寻址方式相类似,相对寻址以程序计数器器PCPC的当前值为基地址,指令中的地址标号作为偏移量,的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。将两者相加之后得到操作数的有效地址。 以下程序段完成子程序的调用和返回,跳转指令以下程序段完成子程序的调用和返回,跳转指令BLBL采用了相对寻址方式:采用了相对寻址方式: 例:例:BLBLNEXTNEXT;跳转到子程序;跳转到子

44、程序 ;NEXTNEXT处执行处执行NEXTNEXTMOVMOVPCPC,LRLR;从子程序返回;从子程序返回 第三章 ARM指令集3. .1 ARM指令集概述指令集概述3. .2 ARM寻址方式寻址方式3. .3 ARM指令详细介绍指令详细介绍 3.3 ARM指令详细介绍 3.3.1 数据处理指令3.3.2 Load/Store指令3.3.3 程序状态寄存器与通用寄存器之间 的传送指令3.3.4 转移指令3.3.5 异常中断指令3.3.6 协处理器指令3.3 ARM指令详细介绍 3.3.1 数据处理指令3.3.2 Load/Store指令3.3.3 程序状态寄存器与通用寄存器之间 的传送指令

45、3.3.4 转移指令3.3.5 异常中断指令3.3.6 协处理器指令3.3.1 数据处理指令 ARMARM的数据处理指令主要完成寄存器中数据的的数据处理指令主要完成寄存器中数据的算术和逻辑运算操作。本节按以下内容组织:算术和逻辑运算操作。本节按以下内容组织:1 1、数据处理指令、数据处理指令分类分类2 2、数据处理指令二进制编码、数据处理指令二进制编码3 3、数据处理指令表、数据处理指令表4 4、数据处理指令详细介绍、数据处理指令详细介绍一、数据处理指令一、数据处理指令分类分类 数据处理指令根据指令实现处理数据处理指令根据指令实现处理功能可分为以下六类:功能可分为以下六类: 1 1、数据传送指

46、令;、数据传送指令;2 2、算术运算指令、算术运算指令;3 3、逻辑运算指令;、逻辑运算指令;4 4、比较指令;、比较指令;5 5、测试指令;、测试指令;6 6、乘法指令。、乘法指令。3.3.1 数据处理指令二、数据处理指令二、数据处理指令二进制编码二进制编码数据处理指令的二进制编码如下:数据处理指令的二进制编码如下:23cond22212019181716151413121110 9 8 7 6 5 4 3 2 1 031302928272625240 0opcodeSRnRdoperand 2#目的寄存器目的寄存器第一操作数寄存器第一操作数寄存器设置条件码设置条件码算术算术/逻辑功能逻辑功

47、能# rot8bit immediate# shiftSh 0RmRsSh 1Rm010118 70117 6 5 4 30118 7 6 5 4 30立即数对齐立即数对齐立即数移位长度立即数移位长度移位类型移位类型第二操作数寄存器第二操作数寄存器寄存器移位长度寄存器移位长度2525三、数据处理指令三、数据处理指令指令表指令表数据处理指令的详细列表如下:数据处理指令的详细列表如下:操作码操作码24:21助记符助记符意义意义效果效果0000AND逻辑位与逻辑位与Rd Rn AND Op20001EOR逻辑位异或逻辑位异或Rd Rn EOR Op20010SUB减减Rd Rn - Op20011R

48、SB反向减反向减Rd Op2 - Rn0100ADD加加Rd Rn + Op20101ADC带进位加带进位加Rd Rn + Op2 + C0110SBC带进位减带进位减Rd Rn - Op2 + C - 10111RSC反向带进位减反向带进位减Rd Op2 - Rn + C - 11000TST测试测试根据根据Rn AND Op2设置条件码设置条件码1001TEQ测试相等测试相等根据根据Rn EOR Op2设置条件设置条件1010CMP比较比较根据根据Rn - Op2设置条件码设置条件码1011CMN负数比较负数比较根据根据Rn + Op2设置条件码设置条件码1100ORR逻辑位或逻辑位或Rd

49、 Rn OR Op21101MOV传送传送Rd Op21110BIC位清零位清零Rd Rn AND NOT Op21111MVN求反求反Rd NOT Op21、数据传输、数据传输助记符助记符说明说明操作操作条件码位置条件码位置MOV Rd,operand2MOV Rd,operand2数据传送数据传送RdRdoperand2 operand2 MOVcondSMOVcondS MVN Rd,operand2MVN Rd,operand2数据非传送数据非传送RdRd( (operand2)operand2)MVNcondSMVNcondS 1、数据传输、数据传输助记符助记符说明说明操作操作条件码

50、位置条件码位置MOV Rd,operand2MOV Rd,operand2数据传送数据传送RdRdoperand2 operand2 MOVcondSMOVcondS MVN Rd,operand2MVN Rd,operand2数据非传送数据非传送RdRd( (operand2)operand2)MVNcondSMVNcondS MOVMOV指令将指令将8 8位立即数或寄存器传送到目标寄存器(位立即数或寄存器传送到目标寄存器(RdRd),可用于移位),可用于移位运算等操作。运算等操作。 指令格式如下:指令格式如下: MOVcondSMOVcondS Rd,operand2 Rd,operand

51、2 MOVMOV指令举例如下:指令举例如下: MOVMOVR1,#0 x10R1,#0 x10;R10 x10 ;R10 x10 MOVMOVR0,R1R0,R1;R0R1;R0R1 MOVSMOVSR3,R1,LSL #2R3,R1,LSL #2;R3R12;R3R12,并影响标志位,并影响标志位 MOVMOVPC,LRPC,LR;PCLR;PCLR,子程序返回,子程序返回 1、数据传输、数据传输助记符助记符说明说明操作操作条件码位置条件码位置MOV Rd,operand2MOV Rd,operand2数据传送数据传送RdRdoperand2 operand2 MOVcondSMOVcond

52、S MVN Rd,operand2MVN Rd,operand2数据非传送数据非传送RdRd( (operand2)operand2)MVNcondSMVNcondS MVNMVN指令将指令将8 8位立即数或寄存器(位立即数或寄存器(operand2operand2)按位取反后传送到目标寄)按位取反后传送到目标寄存器(存器(RdRd),因为其具有取反功能,所以可以装载范围更广的立即数。),因为其具有取反功能,所以可以装载范围更广的立即数。 指令格式如下:指令格式如下: MVNcondSMVNcondS Rd,operand2 Rd,operand2 MVNMVN指令举例如下:指令举例如下: M

53、VNMVNR1,#0 xFFR1,#0 xFF;R10 xFFFFFF00;R10 xFFFFFF00 MVNMVNR1,R2R1,R2; ;将将R2R2取反,结果存到取反,结果存到R1R12、算术运算、算术运算助记符助记符说明说明操作操作条件码位置条件码位置ADD Rd, RnADD Rd, Rn, operand2, operand2加法运算指令加法运算指令RdRdRn+operand2Rn+operand2ADDcondSADDcondS SUB Rd, RnSUB Rd, Rn, operand2, operand2减法运算指令减法运算指令RdRdRn-operand2Rn-opera

54、nd2SUBcondSSUBcondS RSB Rd, RnRSB Rd, Rn, operand2, operand2逆向减法指令逆向减法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondS ADC Rd, RnADC Rd, Rn, operand2, operand2带进位加法带进位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondS SBC Rd, RnSBC Rd, Rn, operand2, operand2带进位减法指令带进位减法指令RdRdRn-operand2-Rn-operand

55、2-(NOT)Carry(NOT)CarrySBCcondSSBCcondS RSC Rd, RnRSC Rd, Rn, operand2, operand2带进位逆向减法带进位逆向减法指令指令RdRdoperand2-Rn-operand2-Rn-(NOT)Carry(NOT)CarryRSCcondSRSCcondS 2、算术运算、算术运算助记符助记符说明说明操作操作条件码位置条件码位置ADD Rd, RnADD Rd, Rn, operand2, operand2加法运算指令加法运算指令RdRdRn+operand2Rn+operand2ADDcondSADDcondS SUB Rd,

56、RnSUB Rd, Rn, operand2, operand2减法运算指令减法运算指令RdRdRn-operand2Rn-operand2SUBcondSSUBcondS RSB Rd, RnRSB Rd, Rn, operand2, operand2逆向减法指令逆向减法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondS ADC Rd, RnADC Rd, Rn, operand2, operand2带进位加法带进位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondS SBC Rd, RnSBC

57、 Rd, Rn, operand2, operand2带进位减法指令带进位减法指令RdRdRn-operand2-Rn-operand2-(NOT)Carry(NOT)CarrySBCcondSSBCcondS RSC Rd, RnRSC Rd, Rn, operand2, operand2带进位逆向减法带进位逆向减法指令指令RdRdoperand2-Rn-operand2-Rn-(NOT)Carry(NOT)CarryRSCcondSRSCcondS ADDADD指令将指令将operand2operand2的值与的值与RnRn的值相加,结果保存到的值相加,结果保存到RdRd寄存器。寄存器。

58、指令格式如下:指令格式如下: ADDcondSADDcondS Rd,Rn,operand2 Rd,Rn,operand2 应用示例:应用示例: ADDS R1,R1,#1ADDS R1,R1,#1;R1;R1R1+1R1+1,并影响标志位,并影响标志位 ADD R1,R1,R2ADD R1,R1,R2;R1;R1R1+R2 R1+R2 助记符助记符说明说明操作操作条件码位置条件码位置ADD Rd, RnADD Rd, Rn, operand2, operand2加法运算指令加法运算指令RdRdRn+operand2Rn+operand2ADDcondSADDcondS SUB Rd, RnS

59、UB Rd, Rn, operand2, operand2减法运算指令减法运算指令RdRdRn-operand2Rn-operand2SUBcondSSUBcondS RSB Rd, RnRSB Rd, Rn, operand2, operand2逆向减法指令逆向减法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondS ADC Rd, RnADC Rd, Rn, operand2, operand2带进位加法带进位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondS SBC Rd, RnSBC Rd

60、, Rn, operand2, operand2带进位减法指令带进位减法指令RdRdRn-operand2-Rn-operand2-(NOT)Carry(NOT)CarrySBCcondSSBCcondS RSC Rd, RnRSC Rd, Rn, operand2, operand2带进位逆向减法带进位逆向减法指令指令RdRdoperand2-Rn-operand2-Rn-(NOT)Carry(NOT)CarryRSCcondSRSCcondS SUBSUB指令用寄存器指令用寄存器RnRn减去减去operand2operand2,结果保存到,结果保存到RdRd中。中。 指令格式如下:指令格式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论