第11、12节课(第3章第4节)_第1页
第11、12节课(第3章第4节)_第2页
第11、12节课(第3章第4节)_第3页
第11、12节课(第3章第4节)_第4页
第11、12节课(第3章第4节)_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、1第第3 3章章 ARMARM体系结构体系结构主要内容ARM体系结构概述体系结构概述 编程模型编程模型ARM基本寻址方式基本寻址方式ARM指令集指令集ARM9TDMI内核内核ARM9与与ARM7的比较的比较ARM920T核核 2第第3 3章章 ARMARM体系结构体系结构3.4.1 指令分类及格式指令分类及格式 1、指令分类、指令分类 ARM指令集是加载指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回到寄存器中。对系统存储器的访问则需要通过专门而且处理结果都要放回到寄存器中。对系统存储器的访问则需要通过专门的的Load/

2、Store指令来完成。指令来完成。 2、指令格式、指令格式 ARM指令使用的基本格式如下:指令使用的基本格式如下: condS ,operand2 opcode: 操作码操作码 cond: 可选条件码可选条件码 S: 可选后缀,若指定可选后缀,若指定S,则根据指令执行结果更新,则根据指令执行结果更新CPSR中条件码中条件码 Rd: 目的寄存器目的寄存器 Rn: 存放第一操作数的寄存器存放第一操作数的寄存器 operand2: 第二个操作数第二个操作数3第第3 3章章 ARMARM体系结构体系结构3.4.1 条件执行条件执行 几乎所有的几乎所有的ARMARM指令均可包含一个指令均可包含一个可选的

3、条件码可选的条件码,句法说明中以,句法说明中以 condcond表示表示, ,只有在只有在CPSRCPSR中的条件码标志满足指定的条件时,带条件码的指令才中的条件码标志满足指定的条件时,带条件码的指令才能执行。并使用能执行。并使用后缀后缀“S S”来区分是否根据执行结果修改条件码标志。来区分是否根据执行结果修改条件码标志。操作码操作码31:28助记符后缀助记符后缀标标 志志含含 义义0000EQZ置位置位相等相等0001NEZ清零清零不等不等0010CS/HSC置位置位大于或等于(无符号大于或等于(无符号=)0011CC/LOC清零清零小于(无符号小于(无符号)1001LSC清零或清零或Z置位

4、置位小于或等于(无符号小于或等于(无符号=1011LTN和和V不同不同带符号带符号1101LEZ置位或置位或N和和V不同不同带符号带符号=1110AL任何任何总是(通常省略)总是(通常省略)4第第3 3章章 ARMARM体系结构体系结构3.4.2 指令分类说明指令分类说明 32位位ARM指令集由指令集由13种基本指令类型组成,分成种基本指令类型组成,分成4大类:大类: 3种类型的种类型的存储器访问指令存储器访问指令:控制存储器和寄存器之间的:控制存储器和寄存器之间的数据传送。一种类型用于优化的灵活寻址;另一种类型用数据传送。一种类型用于优化的灵活寻址;另一种类型用于快速上下文切换;第三种类型用

5、于交换数据。于快速上下文切换;第三种类型用于交换数据。 3种类型的种类型的数据处理指令数据处理指令:使用片内:使用片内ALU、桶形移位器和桶形移位器和乘法器针对乘法器针对31个寄存器完成高速数据处理操作。个寄存器完成高速数据处理操作。 4种类型的种类型的分支指令分支指令:控制程序执行流程、指令优先级以:控制程序执行流程、指令优先级以及及ARM代码和代码和Thumb代码的切换。代码的切换。 3种类型的种类型的协处理器指令协处理器指令:专用于控制外部协处理器。这:专用于控制外部协处理器。这些指令以开放和统一的方式扩展了指令集的片外功能。些指令以开放和统一的方式扩展了指令集的片外功能。5第第3 3章

6、章 ARMARM体系结构体系结构v ARMARM存储器访问指令存储器访问指令(1 1)LDRLDR和和STRSTR字和无符号字节字和无符号字节字节加载是用字节加载是用“0 0”扩展到扩展到3232位。位。LDRLDR和和STRSTR都有如下都有如下4 4种可能的形式:种可能的形式: 零偏移零偏移: :RnRn的值作为传送数据的地址。的值作为传送数据的地址。 句法句法: : op cond B T Rd, Rnop cond B T Rd, Rn 前索引偏移前索引偏移: :在数据传送之前,将偏移量加到在数据传送之前,将偏移量加到RnRn中。其结果作为传中。其结果作为传送数据的存储器地址。若使用后

7、缀送数据的存储器地址。若使用后缀“!”,则结果写回到,则结果写回到RnRn中,且中,且RnRn不允许是不允许是R15R15。 句法句法: : op cond B Rd, Rn, Flexoffset !op cond B Rd, Rn, Flexoffset ! 程序相对偏移程序相对偏移: :程序相对偏移是前索引形式的另一种版本。汇编器程序相对偏移是前索引形式的另一种版本。汇编器由由PCPC计算偏移量,并将计算偏移量,并将PCPC作为作为RnRn生成前索引指令。不能使用后缀生成前索引指令。不能使用后缀“!”。 句法句法: :op cond B Rd, labelop cond B Rd, la

8、bel 后索引偏移后索引偏移: :RnRn的值用做传送数据的存储器地址。在数据传送后,的值用做传送数据的存储器地址。在数据传送后,将偏移量加到将偏移量加到RnRn中。结果写回到中。结果写回到RnRn。RnRn不允许是不允许是R15R15。 句法句法: :op cond B T Rd, Rn, Flexoffsetop cond B T Rd, Rn, Flexoffset6第第3 3章章 ARMARM体系结构体系结构v ARMARM存储器访问指令存储器访问指令(1 1)LDRLDR和和STRSTR字和无符号字节字和无符号字节 例例 子子 LDRLDR R8,R10 R8,R10 ; R8 R8

9、R0R0LDRNE R2,R5,#960! LDRNE R2,R5,#960! ;(;(有条件地)有条件地)R2R2R5+960R5+960,R5R5R5+960R5+960STRSTR R2,R9,#consta-struc R2,R9,#consta-struc ;consta-struc;consta-struc是常量的表达式,该是常量的表达式,该 ; ;常量值的范围为常量值的范围为04 09504 095STRB R0,R3, -R8,ASR #2 STRB R0,R3, -R8,ASR #2 ;R0;R0R3R3-R8/4-R8/4,存储存储R0R0的最低有效的最低有效 ; ;字节,

10、字节,R3R3和和R8R8不变不变STRSTR R5,R7, #-8 R5,R7, #-8 ;R5R5R7R7,R1R1R7R7-8-8LDR LDR R0,localdata R0,localdata ; ;加载一个字,该字位于标号加载一个字,该字位于标号lacaldatalacaldata所在地址所在地址7第第3 3章章 ARMARM体系结构体系结构(2 2)LDRLDR和和STRSTR半字和带符号字节半字和带符号字节v ARMARM存储器访问指令存储器访问指令这些指令有这些指令有4 4种可能的形式:零偏移、前索引偏移、程序相对偏种可能的形式:零偏移、前索引偏移、程序相对偏移和后索引偏移。

11、以同样的顺序,移和后索引偏移。以同样的顺序,4 4种形式的句法为种形式的句法为op cond type Rd, Rnop cond type Rd, Rnop cond type Rd, Rn, offset !op cond type Rd, Rn, offset !op cond type Rd, labelop cond type Rd, labelop cond type Rd, Rn, offsetop cond type Rd, Rn, offset其中:其中:type type 必须是以下所列的其中之一:必须是以下所列的其中之一:SH SH 对带符号半字(仅对带符号半字(仅LDR

12、LDR););H H 对无符号半字;对无符号半字;SB SB 对带符号字节(仅对带符号字节(仅LDRLDR)。)。label label 程序相对偏移表达式。程序相对偏移表达式。 labellabel必须是在当前指令的必须是在当前指令的255255字节范围内。字节范围内。offset offset 加在加在RnRn上的偏移量。上的偏移量。8第第3 3章章 ARMARM体系结构体系结构v ARMARM存储器访问指令存储器访问指令(2 2)LDRLDR和和STRSTR半字和带符号字节半字和带符号字节 例例 子子 LDREQSH R11,R6 LDREQSH R11,R6 ; ;(有条件地)有条件地

13、)R11R11R6R6,加载加载1616位半字,位半字, ; ;带符号扩展到带符号扩展到3232位位LDRH R1,R0,#22 LDRH R1,R0,#22 ; ;R1R1R0+22R0+22,加载加载1616位半字,零扩展到位半字,零扩展到3232位位STRH R4,R0,R1! STRH R4,R0,R1! ; ;R4R4R0+R1R0+R1,存储最低的有效半字到存储最低的有效半字到R0+R1R0+R1 ; ;地址开始的两个字节,地址写回到地址开始的两个字节,地址写回到R0R0LDRSBLDRSB R6,constf R6,constf ; ;加载位于标号加载位于标号constfcons

14、tf地址中的字节,带符号扩展地址中的字节,带符号扩展9第第3 3章章 ARMARM体系结构体系结构(3 3)LDRLDR和和STRSTR双字双字v ARMARM存储器访问指令存储器访问指令加载两个相邻的寄存器和存储两个相邻的寄存器,加载两个相邻的寄存器和存储两个相邻的寄存器,6464位双字。这位双字。这些指令有些指令有4 4种可能的形式:零偏移、前索引偏移、程序相对偏移、种可能的形式:零偏移、前索引偏移、程序相对偏移、后索引偏移。以同样的顺序,后索引偏移。以同样的顺序,4 4种形式的句法为种形式的句法为op cond D Rd, Rnop cond D Rd, Rnop cond D Rd,

15、Rn, offset !op cond D Rd, Rn, offset !op cond D Rd, labelop cond D Rd, labelop cond D Rd, Rn, offsetop cond D Rd, Rn, offset例例 子子LDRDR6,R11LDRMIDR4,R7,R2STRD R4,R9,#24STRDR0,R9,-R2!LDREQD R8,abc410第第3 3章章 ARMARM体系结构体系结构(4 4)LDMLDM和和STMSTMv ARMARM存储器访问指令存储器访问指令加载多个寄存器加载多个寄存器( (LDM)LDM)和存储多个寄存器和存储多个寄存

16、器( (STM)STM)。可以传送可以传送R0-R15R0-R15的任的任何组合。何组合。句法句法: : op cond mode Rn!,reglistop cond mode Rn!,reglist其中:其中:mode mode 是是IA/IB/DA/DB/FD/ED/FA/EAIA/IB/DA/DB/FD/ED/FA/EA中的一个中的一个. .RnRn 基址寄存器,装有传送数据的初始地址。基址寄存器,装有传送数据的初始地址。RnRn不允许是不允许是R15R15。! 可选后缀。若有可选后缀。若有“!”,则最后的地址写回到,则最后的地址写回到RnRn。 reglistreglist 加载或存

17、储的寄存器列表,包含在括号中。加载或存储的寄存器列表,包含在括号中。 可选后缀,不允许在用户模式或系统模式下使用。可选后缀,不允许在用户模式或系统模式下使用。 若若opop是是LDMLDM且且reglistreglist中包含中包含PC(R15)PC(R15),那么除了正常的多寄存器那么除了正常的多寄存器传送外,将传送外,将SPSRSPSR也拷贝到也拷贝到CPSRCPSR中。这用于从异常处理返回,仅在中。这用于从异常处理返回,仅在异常模式下使用。异常模式下使用。 数据传入或传出的是用户模式的寄存器,而不是当前模式的寄数据传入或传出的是用户模式的寄存器,而不是当前模式的寄存器。存器。11第第3

18、3章章 ARMARM体系结构体系结构v ARMARM存储器访问指令存储器访问指令(4 4)LDMLDM和和STMSTM 例例 子子 LDMIA R8,R0,R2,R9LDMIA R8,R0,R2,R9STMDB R1!,R3-R6,R11,R12STMDB R1!,R3-R6,R11,R12STMFD R13!,R0,R4-R7,LR STMFD R13!,R0,R4-R7,LR ;寄存器进栈寄存器进栈LDMFD R13!,R0,R4-R7,PC LDMFD R13!,R0,R4-R7,PC ;寄存器出栈,从子程序返回寄存器出栈,从子程序返回12第第3 3章章 ARMARM体系结构体系结构(5

19、 5)PLDPLDv ARMARM存储器访问指令存储器访问指令CacheCache预加载。使用预加载。使用PLDPLD(PreLoaDPreLoaD)提示存储系统从后面几条新指令所提示存储系统从后面几条新指令所指定的存储器地址加载。存储系统可使用这种方法加速以后的存储器访问。指定的存储器地址加载。存储系统可使用这种方法加速以后的存储器访问。句法句法: : PLD RnFlexoffsetPLD RnFlexoffset 例例 子子 PLD PLD R2R2PLD PLD R15,#280R15,#280PLD PLD R9,#-2481R9,#-2481PLD PLD R0,#avR0,#av

20、* *4 4 ;avav* *4 4必须在汇编时求值,范围为必须在汇编时求值,范围为-4095-4095-4095-4095PLD PLD R0,R2R0,R2PLD PLD R5,R8,LSL #2R5,R8,LSL #213第第3 3章章 ARMARM体系结构体系结构(6 6)SWPSWPv ARMARM存储器访问指令存储器访问指令 在寄存器和存储器之间进行数据交换。使用在寄存器和存储器之间进行数据交换。使用SWPSWP来实现信号量来实现信号量。句法句法: : SWP cond B Rd, Rm, RnSWP cond B Rd, Rm, Rn其中:其中:B B 可选后缀。若有可选后缀。若

21、有B B,则交换字节;否则,交换则交换字节;否则,交换3232位字。位字。 Rd ARM Rd ARM寄存器。数据从存储器加载到寄存器。数据从存储器加载到RdRd。 Rm ARM Rm ARM寄存器。寄存器。RmRm的内容存储到存储器。的内容存储到存储器。RmRm可以与可以与RdRd相同。相同。 在这种情况下,寄存器的内容与存储器的内容进行交换。在这种情况下,寄存器的内容与存储器的内容进行交换。 Rn ARM Rn ARM寄存器。寄存器。RnRn的内容指定要进行数据交换的存储器的的内容指定要进行数据交换的存储器的 地址。地址。RnRn必须与必须与RdRd和和RmRm不同。不同。14第第3 3章

22、章 ARMARM体系结构体系结构v ARMARM数据处理指令数据处理指令数据处理类指令格式数据处理类指令格式: : S Rd, Rn, opcodeS Rd, Rn, opcodeopcode:操作码,如操作码,如ADDADD、SUBSUB、ORRORRcondcond:条件码条件码S S:本指令是否更新本指令是否更新CPSRCPSR中的状态标志位中的状态标志位RdRd:目标寄存器目标寄存器RnRn:第一个源寄存器第一个源寄存器shifter_opershifter_operand:and:复合的源操作数,其格式:复合的源操作数,其格式:立即数立即数ADD R1,R2,#0 x35ADD R1

23、,R2,#0 x35寄存器寄存器SUBS R3,R2,R1SUBS R3,R2,R1寄存器移位寄存器移位ADDEQS R9,R5,R5, LSL #3ADDEQS R9,R5,R5, LSL #3 SUB R3,R2, R1,ROR R7 SUB R3,R2, R1,ROR R715第第3 3章章 ARMARM体系结构体系结构v ARMARM数据处理指令数据处理指令算术算术/ /逻辑运算指令逻辑运算指令 16第第3 3章章 ARMARM体系结构体系结构ADD指令指令ADD指令的格式为:指令的格式为:ADD条件条件S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2ADD指令用于把两个操

24、作数相加,并将结果存放到目的寄存器中。操作数指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个可以是一个寄存器,被移位的寄存器,或一个立即数。立即数。指令示例:指令示例:v ARMARM数据处理指令数据处理指令ADD R0,R1,R2 ; R0 = R1 + R2ADD R0,R1,#256 ; R0 = R1 + 256ADD R0,R2,R3,LSL#1 ; R0 = R2 + (R3 1)17第第3 3章章 ARMARM体系结构体系结构ADC 带进位加法指令。将带进位加法指令。将operan

25、d2 的数据与的数据与Rn 的值相加,再的值相加,再加上加上CPSR 中的中的C 条件标志位。结果保存到条件标志位。结果保存到Rd 寄存器。指令寄存器。指令格式如下:格式如下: ADCcondS Rd,Rn,operand2 ADC 指令举例如下:指令举例如下: ADDS R0,R0,R2 ADC R1,R1,R3 ;使用使用ADC 实现实现64 位加法,位加法,(R1、R0)=(R1、R0)+(R3、R2)18第第3 3章章 ARMARM体系结构体系结构SUB 减法运算指令。用寄存器减法运算指令。用寄存器Rn 减去减去operand2。结果保存。结果保存到到Rd 中。指令格式如下:中。指令格

26、式如下: SUBcondS Rd,Rn,operand2 SUB 指令举例如下:指令举例如下: SUBS R0,R0,#1 ;R0=R0-1 SUBS R2,R1,R2 ;R2=R1-R2 SUB R6,R7,#0 x10 ;R6=R7-0 x1019第第3 3章章 ARMARM体系结构体系结构RSB 逆向减法指令。用寄存器逆向减法指令。用寄存器operand2 减法减法Rn,结果保存,结果保存到到Rd 中。指令格式如下:中。指令格式如下: RSBcondS Rd,Rn,operand2 SUB 指令举例如下:指令举例如下: RSB R3,R1,#0 xFF00 ;R3=0 xFF00-R1

27、RSBS R1,R2,R2,LSL #2 ;R1=R22-R2=R23 RSB R0,R1,#0 ;R0=-R120第第3 3章章 ARMARM体系结构体系结构 SBC 带进位减法指令。用寄存器带进位减法指令。用寄存器Rn 减去减去operand2,再减去,再减去CPSR 中的中的C 条件标志位的非(即若条件标志位的非(即若C 标志清零,则结果减标志清零,则结果减去去1),结果保存到),结果保存到Rd 中。指令格式如下:中。指令格式如下: SCBcondSRd,Rn,operand2 SBC 指令举例如下:指令举例如下: SUBS R0,R0,R2 SBC R1,R1,R3 ;使用使用SBC

28、实现实现64 位减法,位减法,(R1,R0)-(R3,R2)21第第3 3章章 ARMARM体系结构体系结构 RSC 带进位逆向减法指令。用寄存器带进位逆向减法指令。用寄存器operand2 减去减去Rn,再减,再减去去CPSR 中的中的C 条件标志位,结果保存到条件标志位,结果保存到Rd 中。指令格式如中。指令格式如下:下: RSCcondS Rd,Rn,operand2 RSC 指令举例如下:指令举例如下: RSBS R2,R0,#0 RSC R3,R1,#0 ;使用使用RSC 指令实现求指令实现求64 位数值的负数位数值的负数22第第3 3章章 ARMARM体系结构体系结构AND 逻辑与

29、操作指令。将逻辑与操作指令。将operand2 值与寄存器值与寄存器Rn 的值按位的值按位作逻辑与操作,结果保存到作逻辑与操作,结果保存到Rd 中。指令格式如下:中。指令格式如下: ANDcondS Rd,Rn,operand2 AND 指令举例如下:指令举例如下: ANDS R0,R0,#x01 ;R0=R0&0 x01,取出最低位数据,取出最低位数据 AND R2,R1,R3 ;R2=R1&R323第第3 3章章 ARMARM体系结构体系结构ORR 逻辑或操作指令。将逻辑或操作指令。将operand2 的值与寄存器的值与寄存器Rn 的值按的值按位作逻辑或操作,结果保存到位作

30、逻辑或操作,结果保存到Rd 中。指令格式如下:中。指令格式如下: ORRcondS Rd,Rn,operand2 ORR 指令举例如下:指令举例如下: ORR R0,R0,#x0F ;将将R0 的低的低4 位置位置1 MOV R1,R2,LSR #4 ORR R3,R1,R3,LSL #8 ;使用使用ORR 指令将近指令将近R2 的高的高8 位数据移入到位数据移入到R3 低低8 位中位中24第第3 3章章 ARMARM体系结构体系结构EOR 逻辑异或操作指令。将逻辑异或操作指令。将operand2 的值与寄存器的值与寄存器Rn 的值的值按位作逻辑异或操作,结果保存到按位作逻辑异或操作,结果保存

31、到Rd 中。指令格式如下:中。指令格式如下: EORcondSRd,Rn,operand2 EOR 指令举例如下:指令举例如下: EOR R1,R1,#0 x0F ;将将R1 的低的低4 位取反位取反 EOR R2,R1,R0 ;R2=R1R0 EORS R0,R5,#0 x01 ;将将R5 和和0 x01 进行逻辑异或,结果进行逻辑异或,结果保存到保存到R0,并影响标志位,并影响标志位25第第3 3章章 ARMARM体系结构体系结构BIC 位清除指令。将寄存器位清除指令。将寄存器Rn 的值与的值与operand2 的值的反码的值的反码按位作逻辑与操作,结果保存到按位作逻辑与操作,结果保存到R

32、d 中。指令格式如下:中。指令格式如下: BICcondSRd,Rn,operand2 BIC 指令举例如下:指令举例如下: BIC R1,R1,#0 x0F ;将将R1 的低的低4 位清零,其它位不变位清零,其它位不变 BIC R1,R2,R3 ;将拭的反码和将拭的反码和R2 相逻辑与,结果保存到相逻辑与,结果保存到R126第第3 3章章 ARMARM体系结构体系结构CMP 比较指令。指令使用寄存器比较指令。指令使用寄存器Rn 的值减去的值减去operand2 的值,的值,根据操作的结果更新根据操作的结果更新CPSR中的相应条件标志位,以便后面的中的相应条件标志位,以便后面的指令根据相应的条

33、件标志来判断是否执行。指令格式如下:指令根据相应的条件标志来判断是否执行。指令格式如下: CMPcond Rn,operand2 CMP 指令举例如下:指令举例如下: CMP R1,#10 ;R1 与与10 比较,设置相关标志位比较,设置相关标志位 CMP R1,R2 ;R1 与与R2 比较,设置相关标志位比较,设置相关标志位 CMP 指令与指令与SUBS 指令的区别在于指令的区别在于CMP 指令不保存运算指令不保存运算结果。在进行两个数据大小判断时,常用结果。在进行两个数据大小判断时,常用CMP 指令及相应的指令及相应的条件码来操作。条件码来操作。 27第第3 3章章 ARMARM体系结构体

34、系结构 CMN 负数比较指令。指令使用寄存器负数比较指令。指令使用寄存器Rn 与值加上与值加上operand2 的值,根据操作的结果更新的值,根据操作的结果更新CPSR 中的相应条中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是件标志位,以便后面的指令根据相应的条件标志来判断是否执行,指令格式如下:否执行,指令格式如下: CMNcond Rn,operand2 CMN R0,#1 ;R0+1,判断判断R0 是否为是否为1 的补码,若是的补码,若是Z 置位置位 CMN 指令与指令与ADDS 指令的区别在于指令的区别在于CMN 指令不保指令不保存运算结果。存运算结果。CMN 指令可用于

35、负数比较,比如指令可用于负数比较,比如CMNR0,#1 指令则表示指令则表示R0 与与-1 比较,若比较,若R0 为为-(即即1 的补码的补码),则,则Z 置位,否则置位,否则Z复位。复位。28第第3 3章章 ARMARM体系结构体系结构n ARM指令集指令集指令格式指令格式29第第3 3章章 ARMARM体系结构体系结构30第第3 3章章 ARMARM体系结构体系结构 ARM指令集第2个操作数#immed_8r#immed_8r常数表达式常数表达式 该常数必须对应该常数必须对应8 8位位图,即一个位位图,即一个8 8位的常数通过位的常数通过循环右移偶数位循环右移偶数位得到。得到。循环右移循环

36、右移10位位0 x120 0 0 1 0 0 1 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x801 0 0 0 0 0 0 00 x040 0 0 0 0 1 0 08位常数位常数31第第3 3章章 ARMARM体系结构体系结构v ARMARM数据处理指令数据处理指令乘法指令乘法指令 MULMUL指令将指令将RmRm和和RsRs中的值相乘,并将最低有效的中的值相乘,并将最低有效的3232位结果放到位结果放到RdRd中。中。句法:句

37、法:MUL cond S Rd,Rm,RsMUL cond S Rd,Rm,RsMLAMLA指令将指令将RmRm和和RsRs中值相乘,再加上中值相乘,再加上RnRn的值,并将最低有效的的值,并将最低有效的3232位结果放到位结果放到RdRd中。中。句法:句法:MLA cond S Rd,Rm,Rs,RnMLA cond S Rd,Rm,Rs,RnUMULLUMULL指令将指令将RmRm和和RsRs中的值解释为无符号整数。该指令将这两中的值解释为无符号整数。该指令将这两个整数相乘,并将结果的最低有效个整数相乘,并将结果的最低有效3232位放在位放在RdLoRdLo中,最高有效中,最高有效3232

38、位放在位放在RdHiRdHi中。中。前导零计数前导零计数CLZCLZ指令对指令对RmRm中值的前导零的个数进行计数,结果放到中值的前导零的个数进行计数,结果放到RdRd中。若中。若源寄存器全为源寄存器全为0 0,则结果为,则结果为3232。若位。若位3131为为1 1,则结果为,则结果为0 0 。句法:句法:CLZ cond Rd, RmCLZ cond Rd, Rm32第第3 3章章 ARMARM体系结构体系结构UMLALUMLAL指令将指令将RmRm和和RsRs中的值解释为无符号整数。该指令将这中的值解释为无符号整数。该指令将这两个整数相乘,并将两个整数相乘,并将6464位结果加到位结果加

39、到RdHiRdHi和和RdLoRdLo中的中的6464位无符位无符号整数上。号整数上。SMULLSMULL指令将指令将RmRm和和RsRs中的值解释为带符号的补码整数。该指中的值解释为带符号的补码整数。该指令将这两个整数相乘,并将结果的最低有效令将这两个整数相乘,并将结果的最低有效3232位放在位放在RdLoRdLo中中,将最高有效,将最高有效3232位放在位放在RdHiRdHi中。中。SMLALSMLAL指令将指令将RmRm和和RsRs中的值解释为带符号的补码整数。该指中的值解释为带符号的补码整数。该指令将这两个整数相乘,并将令将这两个整数相乘,并将6464位结果加到位结果加到RdHiRdH

40、i和和RdLoRdLo中的中的6464位带符号补码整数上。位带符号补码整数上。句法:句法:op cond S RdLo,RdHi,Rm,Rsop cond S RdLo,RdHi,Rm,Rs v ARMARM数据处理指令数据处理指令33第第3 3章章 ARMARM体系结构体系结构MUL 32 位乘法指令。指令将位乘法指令。指令将Rm 和和Rs 中的值相乘,结果中的值相乘,结果的低的低32 位保存到位保存到Rd 中。指令格式如下:中。指令格式如下: MULcondS Rd,Rm,Rs MUL 指令举例如下:指令举例如下: MUL R1,R2,R3 ;R1=R2R3 MULS R0,R3,R7 ;

41、R0=R3R7,同时设置,同时设置CPSR 中中的的N 位和位和Z 位位34第第3 3章章 ARMARM体系结构体系结构 MLA 32 位乘加指令。指令将位乘加指令。指令将Rm 和和Rs 中的值相乘,再将中的值相乘,再将乘积加上第乘积加上第3 个操作数,结果的低个操作数,结果的低32 位保存到位保存到Rd 中。指中。指令格式如下:令格式如下: MLAcondS Rd,Rm,Rs,Rn MLA 指令举例如下:指令举例如下: MLA R1,R2,R3,R0 ;R1=R2R3+1035第第3 3章章 ARMARM体系结构体系结构 UMULL 64 位无符号乘法指令。指令将位无符号乘法指令。指令将Rm

42、 和和Rs 中的值作无中的值作无符号数相乘,结果的低符号数相乘,结果的低32 位保存到位保存到RsLo 中,而高中,而高32 位位保存到保存到RdHi 中。指令格式如下:中。指令格式如下: UMULLcondS RdLo,RdHi,Rm,Rs UMULL 指令举例如下:指令举例如下: UMULL R0,R1,R5,R8 ;(R1、R0)=R5R836第第3 3章章 ARMARM体系结构体系结构UMLAL 64 位无符号乘加指令。指令将位无符号乘加指令。指令将Rm 和和Rs 中的值作无中的值作无符号数相乘,符号数相乘,64 位乘积与位乘积与RdHi、RdLo 相加,结果的低相加,结果的低32 位

43、保存到位保存到RdLo 中,而高中,而高32 位保存到位保存到RdHi 中。指令中。指令格式如下:格式如下: UMLALcondS RdLo,RdHi,Rm,Rs UMLAL 指令举例如下:指令举例如下: UMLAL R0,R1,R5,R8 ;(R1,R0)=R5R8+(R1,R0)37第第3 3章章 ARMARM体系结构体系结构 SMULL 64 位有符号乘法指令。指令将位有符号乘法指令。指令将Rm 和和Rs 中的值作有符中的值作有符号数相乘,结果的低号数相乘,结果的低32 位保存到位保存到RdLo 中,而高中,而高32 位保存位保存到到RdHi 中。指令格式如下:中。指令格式如下: SMU

44、LLcondS RdLo,RdHi,Rm,Rs SMULL 指令举例如下:指令举例如下: SMULL R2,R3,R7,R6 ;(R3,R2)=R7R638第第3 3章章 ARMARM体系结构体系结构 SMLAL 64 位有符号乘加指令。指令将位有符号乘加指令。指令将Rm 和和Rs 中的值作中的值作有符号数相乘,有符号数相乘,64 位乘积与位乘积与RdHi、RdLo,相加,结果,相加,结果的低的低32 位保存到位保存到RdLo 中,而高中,而高32 位保存到位保存到RdHi 中。中。指令格式如下:指令格式如下: SMLALcondS RdLo,RdHi,Rm,Rs SMLAL 指令举例如下:指

45、令举例如下: SMLAL R2,R3,R7,R6 ;(R3,R2)=R7R6+(R3,R2)39第第3 3章章 ARMARM体系结构体系结构v ARMARM转移指令转移指令(1 1)B B和和BLBL B B(BranchBranch)指令引起处理器转移到指令引起处理器转移到labellabel。 句法句法: : B cond labelB cond label BL BL(Branch and Branch and LinkLink)指令将下一条指令的地址拷贝指令将下一条指令的地址拷贝到到R14R14(LRLR,链接寄存器),并引起转移到链接寄存器),并引起转移到labellabel。 句法

46、句法: : BL cond labelBL cond label (2 2)BX BX : :引起处理器转移到引起处理器转移到RmRm中的地址。若中的地址。若RmRm的位的位00为为1 1,则指令集变换到则指令集变换到ThumbThumb。 句法句法: : BX cond Rm BX cond Rm (3 3)BLXBLX: :带链接转移并可选地交换指令集。带链接转移并可选地交换指令集。 句法句法: : BLX cond RmBLX cond Rm BLX label BLX label40第第3 3章章 ARMARM体系结构体系结构v ARMARM协处理器指令协处理器指令 CDP 协处理器数

47、据操作指令。协处理器数据操作指令。ARM 处理器通过处理器通过CDP 指令通知指令通知ARM 协处理协处理器执行特定的操作。该操作由协处理器完成,即对命令的参数的解释与协器执行特定的操作。该操作由协处理器完成,即对命令的参数的解释与协处理器有关,指令的使用取决于协处理器。若协处理器不能成功地执行该处理器有关,指令的使用取决于协处理器。若协处理器不能成功地执行该操作,将产操作,将产 生未定义指令异常中断。指令格式如下:生未定义指令异常中断。指令格式如下: CDPcond coproc,opcodel,CRd,CRn,CRm,opcode2 其中:其中: coproc 指令操作的协处理器名。标准名

48、为指令操作的协处理器名。标准名为pn,n 为为015。 opcodel 协处理器的特定操作码。协处理器的特定操作码。 CRd 作为目标寄存器的协处理器寄存器。作为目标寄存器的协处理器寄存器。 CRN 存放第存放第1 个操作数的协处理器寄存器。个操作数的协处理器寄存器。 CRm 存放第存放第2 个操作数的协处理器寄存器。个操作数的协处理器寄存器。 Opcode2 可选的协处理器特定操作码。可选的协处理器特定操作码。 CDP 指令举例如下:指令举例如下: CDP p7,0,c0,c2,c3,0 ;协处理器协处理器7 操作,操作码为操作,操作码为0,可选操作码为,可选操作码为0 CDP p6,1,c

49、3,c4,c5 ;协处理器操作,操作码为协处理器操作,操作码为141第第3 3章章 ARMARM体系结构体系结构 LDC 协处理器数据读取指令。协处理器数据读取指令。LDC 指令从某一连续的内存单元将数据读取指令从某一连续的内存单元将数据读取到协处理器的寄存器中。协处理器数据的数据的传送,由协处理器来控传到协处理器的寄存器中。协处理器数据的数据的传送,由协处理器来控传送的字数。若协处理器不能成功地执行该操作,将产生未定义指令异常中送的字数。若协处理器不能成功地执行该操作,将产生未定义指令异常中断。指令格式如下:断。指令格式如下: LDCcondL coproc,CRd, 其中:其中: L 可选

50、后缀,指明是长整数传送。可选后缀,指明是长整数传送。 coproc 指令操作的协处理器名。标准名为指令操作的协处理器名。标准名为pn,n 为为015 CRd 作为目标寄存的协处理器寄存器。作为目标寄存的协处理器寄存器。 指定的内存地址指定的内存地址 LDC 指令举例如下:指令举例如下: LDC p5,c2,R2,#4;读取读取R2+4指向的内存单元的数据,传送到协处理器指向的内存单元的数据,传送到协处理器p5的的c2寄存器中寄存器中 LDC p6,c2,R1 ;读取是指向的内存单元的数据,传送到协处理器读取是指向的内存单元的数据,传送到协处理器p6 的的c2 寄存器中寄存器中42第第3 3章章

51、 ARMARM体系结构体系结构 STC 协处理器数据写入指令。协处理器数据写入指令。STC 指令将协处理器的寄存器数据写入指令将协处理器的寄存器数据写入到某一连续的内存单元中。进行协处理器数据的数据传送,由协处理到某一连续的内存单元中。进行协处理器数据的数据传送,由协处理器来控制传送的字数。若协处理器不能成功地执行该操作,将产生未器来控制传送的字数。若协处理器不能成功地执行该操作,将产生未定义指令异常中断。指令格式如下:定义指令异常中断。指令格式如下: STCcondL coproc,CRd, 其中:其中: L 可选后缀,指明是长整数传送。可选后缀,指明是长整数传送。 coproc 指令操作的

52、协处理器名。标准名为指令操作的协处理器名。标准名为pn,n 为为015 CRd 作为目标寄存的协处理器寄存器。作为目标寄存的协处理器寄存器。 指定的内存地址指定的内存地址 STC 指令举例如下:指令举例如下: STC p5,c1,R0 STC p5,c1,Ro,#-0 x0443第第3 3章章 ARMARM体系结构体系结构 MCR ARM 寄存器到协处理器寄存器的数据传送指令。寄存器到协处理器寄存器的数据传送指令。MCR 指令将指令将ARM 处理器的寄存器中的数据传送到协处理器的寄存器中。若协处理处理器的寄存器中的数据传送到协处理器的寄存器中。若协处理器不能成功地执行该操作,将产生未定义指令异

53、常中断。指令格式如器不能成功地执行该操作,将产生未定义指令异常中断。指令格式如下:下: MCRcond coproc,opcodel,Rd,CRn,CRm,opcode2 其中:其中:coproc 指令操作的协处理器名。标准名为指令操作的协处理器名。标准名为pn,n 为为015。 cpcodel 协处理器的特定操作码。协处理器的特定操作码。 CRD 作为目标寄存器的协处理器寄存器。作为目标寄存器的协处理器寄存器。 CRn 存放第存放第1 个操作数的协处理器寄存器个操作数的协处理器寄存器 CRm 存放第存放第2 个操作数的协处理器寄存器。个操作数的协处理器寄存器。 Opcode2 可选的协处理器

54、特定操作码。可选的协处理器特定操作码。 MCR 指令举例如下:指令举例如下: MCR p6,2,R7,c1,c2, MCR P7,0,R1,c3,c2,1,44第第3 3章章 ARMARM体系结构体系结构 MRC 协处理器寄存器到协处理器寄存器到ARM 寄存器到的数据传送指令。寄存器到的数据传送指令。MRC 指令将协处指令将协处理器寄存器中的数据传送到理器寄存器中的数据传送到ARM 处理器的寄存器中。若协处理器不能成功处理器的寄存器中。若协处理器不能成功地执行该操作。将产生未定义异常中断。指令格式如下:地执行该操作。将产生未定义异常中断。指令格式如下: MRC cond coproc,opco

55、del,Rd,CRn,CRm,opcode2 其中:其中:coproc 指令操作的协处理器名。标准名为指令操作的协处理器名。标准名为pn,n为为015。 opcodel 协处理器的特定操作码。协处理器的特定操作码。 CRd 作为目标寄存器的协处理器寄存器。作为目标寄存器的协处理器寄存器。 CRn 存放第存放第1 个操作数的协处理器寄存器。个操作数的协处理器寄存器。 CRm 存放第存放第2 个操作数的协处理器寄存器。个操作数的协处理器寄存器。 opcode2 可选的协处理器特定操作码。可选的协处理器特定操作码。 MRC 指令举例如下:指令举例如下: MRC p5,2,R2,c3,c2 MRC p

56、7,0,R0,c1,c2,145第第3 3章章 ARMARM体系结构体系结构v 杂项杂项ARMARM指令指令(1 1)SWI,SWI,引起软件中断。引起软件中断。这意味着处理器模式变换为管理模式,这意味着处理器模式变换为管理模式,CPSRCPSR保存到管理保存到管理模式的模式的SPSRSPSR中,执行转移到中,执行转移到SWISWI向量。向量。句法句法: : SWI cond immed_24SWI cond immed_24其中:其中:immed_24immed_24为表达式,其值为为表达式,其值为02022424-1-1范围内的整数。范围内的整数。(2 2)MRS,MRS,将将CPSRCP

57、SR或或SPSRSPSR的内容传送到通用寄存器。的内容传送到通用寄存器。句法句法: : MRS cond Rd,psrMRS cond Rd,psr其中:其中:Rd Rd 目标寄存器。目标寄存器。RdRd不允许为不允许为R15R15。 psr CPSR psr CPSR或或SPSRSPSR。(3 3)MSR,MSR,用立即数或通用寄存器的内容加载用立即数或通用寄存器的内容加载CPSRCPSR或或SPSRSPSR的指定区域。的指定区域。句法句法: : MSR cond _,#immed_8rMSR cond _,#immed_8r MSR cond _,Rm MSR cond _,Rm其中:其中

58、: CPSRpsr CPSR或或SPSRSPSR。 指定传送的区域。指定传送的区域。 immed_8r immed_8r 值为数字常量的表达式。常量必须对应于值为数字常量的表达式。常量必须对应于8 8位位图在位位图在3232位字中循位字中循环移位偶数位后的值。环移位偶数位后的值。 Rm Rm 源寄存器。源寄存器。(4 4)BKPT,BKPT,引起处理器进入调试模式。引起处理器进入调试模式。句法句法: : BKPT immed_16BKPT immed_16其中:其中:immed_16immed_16为表达式,其值为范围在为表达式,其值为范围在065 536065 536内的整数。内的整数。46

59、第第3 3章章 ARMARM体系结构体系结构(1)从)从 r14 中减去中减去 4 来来获得获得 SWI 指令的地址。指令的地址。 (2)把这个指令装载到)把这个指令装载到一个寄存器。一个寄存器。 (3)清除这个指令的高)清除这个指令的高端端 8 位,去掉了位,去掉了 OpCode 而只剩下的而只剩下的 SWI 编号。编号。 (4)使用这个值来找到)使用这个值来找到要被执行的代码的例程的要被执行的代码的例程的地址地址(使用查找表等使用查找表等)。 (5)恢复寄存器)恢复寄存器 r0-r12。 (6)使处理器离开超级)使处理器离开超级用户模式。用户模式。 (7)跳转到这个例程的)跳转到这个例程的

60、地址。地址。 读出读出SWI 立即数:立即数: T_bit EQU 0 x20 SWI_Hander STMFD SP!,R0_R3,R12,LR ;现场保护现场保护 MRS R0,SPSR ;读取读取SPSR STMFD SP!,R0 ;保存保存SPSR TST R0,#T_bit ;测试测试T 标志位标志位 LDRNEH R0,LR,#-2 ;若是若是Thumb 指令,指令,读取指令码读取指令码(16 位位) BICNE R0,R0,#0 xFF00 ;取得取得Thumb 指令的指令的8 位立即数位立即数 LDREQ R0,LR,#-4 ;若是若是ARM 指令,读指令,读取指令码取指令码(32 位位) B

温馨提示

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

最新文档

评论

0/150

提交评论