arm体系架构与原理教学arm指令系统及汇编程序设计PPT课件_第1页
arm体系架构与原理教学arm指令系统及汇编程序设计PPT课件_第2页
arm体系架构与原理教学arm指令系统及汇编程序设计PPT课件_第3页
arm体系架构与原理教学arm指令系统及汇编程序设计PPT课件_第4页
arm体系架构与原理教学arm指令系统及汇编程序设计PPT课件_第5页
已阅读5页,还剩107页未读 继续免费阅读

下载本文档

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

文档简介

1、嵌入式系统教案2022-6-25第1页/共112页2提纲ARM 指令系统ARM和THUMB混合调用ATPCS 介绍THUMB 指令系统第四章 ARM指令系统及汇编程序设计第2页/共112页3跳转指令 跳转指令用于实现程序流程的跳转,在跳转指令用于实现程序流程的跳转,在ARMARM程序中有两种方法可以实现程序流程序中有两种方法可以实现程序流程的跳转:程的跳转:v 使用专门的跳转指令。使用专门的跳转指令。v 直接向程序计数器直接向程序计数器PCPC写入跳转地址值。写入跳转地址值。ARMARM指令集中的跳转指令可以完成从当前指令向前或向后的指令集中的跳转指令可以完成从当前指令向前或向后的32MB32

2、MB的地址空间的的地址空间的跳转,包括以下跳转,包括以下4 4条指令:条指令:v B B跳转指令跳转指令v BLBL带返回的跳转指令带返回的跳转指令v BLXBLX带返回和状态切换的跳转指令带返回和状态切换的跳转指令v BXBX带状态切换的跳转指令带状态切换的跳转指令ARM 指令系统第3页/共112页4B指令 B指令的格式为:指令的格式为:B条件条件目标地址目标地址 B B指令指令是最简单的跳转指令。一旦遇到一个是最简单的跳转指令。一旦遇到一个 B B 指令,指令,ARM 处理器将立即跳转到处理器将立即跳转到给定的目标地址,从那里继续执行。注意存储在跳转指令中的实际值是相对当前给定的目标地址,

3、从那里继续执行。注意存储在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算。它是值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算。它是24位位有符号数,左移两位后有符号扩展为有符号数,左移两位后有符号扩展为 32 位,表示的有效偏移为位,表示的有效偏移为 26 位位(前后前后32MB的地址空间的地址空间)。如:。如:BLabel /*程序无条件跳转到标号程序无条件跳转到标号Label处执行处执行*/ARM 指令系统第4页/共112页5BL指令 BLBL指令的格式为:指令的格式为:BLBL条件条件 目标地址目标地址 BL BL 是另一个跳转指令,但

4、跳转之前,会在寄存器是另一个跳转指令,但跳转之前,会在寄存器R14R14中保存中保存PCPC的当前内容,因的当前内容,因此,可以通过将此,可以通过将R14 R14 的内容重新加载到的内容重新加载到PCPC中,来返回到跳转指令之后的那个指中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本但常用的手段。以下指令:令处执行。该指令是实现子程序调用的一个基本但常用的手段。以下指令:BLBLLabelLabel/ /* *当程序无条件跳转到标号当程序无条件跳转到标号LabelLabel处执行时,同时将当前的处执行时,同时将当前的PCPC值保存到值保存到R14R14中中 * */

5、/ARM 指令系统第5页/共112页6BLX指令 BLXBLX指令的格式为:指令的格式为:BLX BLX 目标地址目标地址 BLXBLX指令从指令从ARMARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态由指令集跳转到指令中所指定的目标地址,并将处理器的工作状态由ARMARM状态切换到状态切换到ThumbThumb状态,状态,该指令同时将该指令同时将PCPC的当前内容保存到寄存器的当前内容保存到寄存器R14R14中。因此,当子程序使用中。因此,当子程序使用ThumbThumb指令集,而调用者使用指令集,而调用者使用ARMARM指指令集时,可以通过令集时,可以通过BLXBLX指令实现

6、子程序的调用和处理器工作状态的切换。同时,子程序的返回可以通过将寄指令实现子程序的调用和处理器工作状态的切换。同时,子程序的返回可以通过将寄存器存器R14R14值复制到值复制到PCPC中来完成。中来完成。 ARM 指令系统第6页/共112页7BX指令 BXBX指令的格式为:指令的格式为:BXBX条件条件 目标地址目标地址 BXBX指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARMARM指令,也可以是指令,也可以是ThumbThumb指令。指令。ARM 指令系统第7页/共112页8数据处理指令 数据处理指令可分为数据传送指令

7、、算术逻辑运算指令和比较指令等。数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。 数据传送指令用于在寄存器和存储器之间进行数据的双向传输。数据传送指令用于在寄存器和存储器之间进行数据的双向传输。 算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新新CPSRCPSR中的相应条件标志位。中的相应条件标志位。 比较指令不保存运算结果,只更新比较指令不保存运算结果,只更新CPSRCPSR中相应的条件标志位。中相应的条件标志位。ARM 指令系统第8页/共1

8、12页9数据处理指令灵活的第二操作数如:ADDcondS Rd, Rn, Operand2ADDcondS Rd, Rn, Operand2Operand2Operand2可能的形式:#immed_8r#immed_8rRm,shiftRm,shiftADD r0, r1, #100ADD r0, r1, #100ADD r0, r1, r2ADD r0, r1, r2ADD r0, r1, r2, ASR #1ADD r0, r1, r2, ASR #1ARM 指令系统R0 = r1 + 100R0 = r1 + r2R0 = r1 + (r2算术右移一位)若指定S,则根据操作结果更新条件码

9、标志第9页/共112页10数据处理指令Shift 移位模式ASRASR n n 算术右移n n位(1=n=321=n=32)LSLLSL n n 逻辑左移n n位(1=n=321=n=32)LSRLSR n n 逻辑右移n n位(1=n=321=n=32)RORROR n n 循环右移n n位(1=n=321=n=32)RRXRRX 带扩展的循环右移1 1位type Rs type Rs type = ASR/LSL/LSR/ROTtype = ASR/LSL/LSR/ROTARM 指令系统第10页/共112页11ASR算术右移n n位即RmRm中的内容除以2 2的n n次方。将原来的位313

10、1拷贝到寄存器左边的n n位中,即空出的最高位补符号位。ARM 指令系统第11页/共112页12LSR和LSL逻辑右移n n位,即将RmRm的内容除以2 2的n n次方。寄存器左边的n n位清零。逻辑左移n n位,即将RmRm的内容乘以2 2的n n次方。寄存器右边的n n位清零。ARM 指令系统第12页/共112页13ROR 循环右移n n位,把寄存器右边的n n位移动到结果的左边n n位。ARM 指令系统第13页/共112页14RRX 带扩展的循环右移将RmRm的内容循环右移一位。进位标志拷贝到RmRm的位3131。ARM 指令系统第14页/共112页15MOV指令 MOVMOV指令的格式

11、为:指令的格式为:MOVMOV条件条件SS目的寄存器,源操作数目的寄存器,源操作数 MOVMOV指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中存器。其中S S选项决定指令的操作是否影响选项决定指令的操作是否影响CPSRCPSR中条件标志位的值,当没有中条件标志位的值,当没有S S时时指令不更新指令不更新CPSRCPSR中条件标志位的值。指令示例:中条件标志位的值。指令示例:MOVMOVR1R1,R0R0MOV MOV R1R1,R0R0,LSL LSL 3 3ARM 指令系统第15页/共112页16

12、MVN指令 MVNMVN指令的格式为:指令的格式为:MVNMVN条件条件SS目的寄存器,源操作数目的寄存器,源操作数 MVNMVN指令可完成从另一个寄存器、被移位的寄存器、或将一个立即数加载到目的指令可完成从另一个寄存器、被移位的寄存器、或将一个立即数加载到目的寄存器。与寄存器。与MOVMOV指令不同之处是在传送之前按位被取反了,即把一个被取反的值指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。其中传送到目的寄存器中。其中S S决定指令的操作是否影响决定指令的操作是否影响CPSRCPSR中条件标志位的值,中条件标志位的值,当没有当没有S S时指令不更新时指令不更新C

13、PSRCPSR中条件标志位的值。中条件标志位的值。MVNMVNR0R0,0 0ARM 指令系统第16页/共112页17CMP指令 CMPCMP指令的格式为:指令的格式为:CMPCMP条件条件 操作数操作数1 1,操作数,操作数2 2 CMPCMP指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新时更新CPSRCPSR中条件标志位的值。该指令进行一次减法运算,但不存储结果,只中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数更改条件标志位。标志位表示的是操作数1 1

14、与操作数与操作数2 2的关系的关系( (大、小、相等大、小、相等) ),例如,当操作数例如,当操作数1 1大于操作操作数大于操作操作数2 2,则此后的有,则此后的有GT GT 后缀的指令将可以执行。后缀的指令将可以执行。CMPCMPR1R1,R0R0CMPCMPR1R1,100100ARM 指令系统第17页/共112页18CMN指令 CMNCMN指令的格式为:指令的格式为:CMNCMN条件条件 操作数操作数1 1,操作数,操作数2 2 CMNCMN指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时更新指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,

15、同时更新CPSRCPSR中条件中条件标志位的值。该指令实际完成操作数标志位的值。该指令实际完成操作数1 1和操作数和操作数2 2相加,并根据结果更改条件标志位。相加,并根据结果更改条件标志位。CMNCMNR1R1,R0R0CMNCMNR1R1,100100ARM 指令系统第18页/共112页19TST指令 TSTTST指令的格式为:指令的格式为:TSTTST条件条件 操作数操作数1 1,操作数,操作数2 2 TSTTST指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果

16、更新CPSRCPSR中条件标志位的值。操作数中条件标志位的值。操作数1 1是要测试的数据,而操作数是要测试的数据,而操作数2 2是一个位掩码,该指令一般用来检测是否设是一个位掩码,该指令一般用来检测是否设置了特定的位。置了特定的位。TSTTSTR1R1,1 1TSTTSTR1R1,0 xffe0 xffeARM 指令系统第19页/共112页20TEQ指令 TEQTEQ指令的格式为:指令的格式为:TEQTEQ条件条件 操作数操作数1 1,操作数,操作数2 2 TEQTEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按

17、位的异或运算,并根据运算结果更新或运算,并根据运算结果更新CPSRCPSR中条件标志位的值。该指令通常用于比较操中条件标志位的值。该指令通常用于比较操作数作数1 1和操作数和操作数2 2是否相等。是否相等。TEQTEQR1R1,R2R2ARM 指令系统第20页/共112页21ADD指令 ADDADD指令的格式为:指令的格式为:ADDADD条件条件S S 目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2 ADDADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数1 1应是应是一个寄存器,操作数一个寄存器,操

18、作数2 2可以是一个寄存器,被移位的寄存器,或一个立即数。可以是一个寄存器,被移位的寄存器,或一个立即数。ADD ADD R0R0,R1R1,R2 R2 ADD ADD R0R0,R1R1,#256 #256 ADD ADD R0R0,R2R2,R3R3,LSL#1LSL#1 ARM 指令系统第21页/共112页22ADC指令 ADCADC指令的格式为:指令的格式为:ADCADC条件条件S S 目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2 ADCADC指令用于把两个操作数相加,再加上指令用于把两个操作数相加,再加上CPSRCPSR中的中的C C条件标志位的值,并将结果条件标

19、志位的值,并将结果存放到目的寄存器中。操作数存放到目的寄存器中。操作数1 1应是一个寄存器,操作数应是一个寄存器,操作数2 2可以是一个寄存器,可以是一个寄存器,被移位的寄存器,或一个立即数。被移位的寄存器,或一个立即数。 以下指令序列完成两个以下指令序列完成两个128128位数的加法,第一个数存放在寄存器位数的加法,第一个数存放在寄存器R7R7R4R4,第二个,第二个数存放在寄存器数存放在寄存器R11R11R8R8,运算结果存放在寄存器,运算结果存放在寄存器R3R3R0R0:ADDS ADDS R0R0,R4R4,R8 R8 ; 加低端的字加低端的字ADCS ADCS R1R1,R5R5,R

20、9 R9 ; 加第二个字,带进位加第二个字,带进位ADCS ADCS R2R2,R6R6,R10 R10 ; 加第三个字,带进位加第三个字,带进位ADC ADC R3R3,R7R7,R11 R11 ; 加第四个字,带进位加第四个字,带进位 ARM 指令系统第22页/共112页23SUB指令 SUBSUB指令的格式为:指令的格式为:SUBSUB条件条件S S 目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2 SUBSUB指令用于把操作数指令用于把操作数1 1减去操作数减去操作数2 2,并将结果存放到目的寄存器中。操作数,并将结果存放到目的寄存器中。操作数1 1应是一个寄存器,操作

21、数应是一个寄存器,操作数2 2可以是一个寄存器,被移位的寄存器,或一个立即数。可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。该指令可用于有符号数或无符号数的减法运算。SUB SUB R0R0,R1R1,R2 R2 ; R0 = R1 - R2R0 = R1 - R2SUB SUB R0R0,R1R1,#256 #256 ; R0 = R1 - 256R0 = R1 - 256SUB SUB R0R0,R2R2,R3R3,LSL#1 LSL#1 ; R0 = R2 - (R3 1)R0 = R2 - (R3 1) ARM 指令系统第23页/共112页2

22、4SBC指令 SBCSBC指令的格式为:指令的格式为:SBCSBC条件条件S S 目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2 SBCSBC指令用于把操作数指令用于把操作数1 1减去操作数减去操作数2 2,再减去,再减去CPSRCPSR中的中的C C条件标志位的反码,并条件标志位的反码,并将结果存放到目的寄存器中。操作数将结果存放到目的寄存器中。操作数1 1应是一个寄存器,操作数应是一个寄存器,操作数2 2可以是一个寄可以是一个寄存器,被移位的寄存器,或一个立即数。存器,被移位的寄存器,或一个立即数。 SUBS SUBS R0R0,R1R1,R2R2 ARM 指令系统第24

23、页/共112页25RSB指令 RSBRSB指令的格式为:指令的格式为:RSBRSB条件条件S S 目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2 RSBRSB指令称为逆向减法指令,用于把操作数指令称为逆向减法指令,用于把操作数2 2减去操作数减去操作数1 1,并将结果存放到目的,并将结果存放到目的寄存器中。操作数寄存器中。操作数1 1应是一个寄存器,操作数应是一个寄存器,操作数2 2可以是一个寄存器,被移位的寄可以是一个寄存器,被移位的寄存器,或一个立即数。存器,或一个立即数。RSB RSB R0R0,R1R1,R2 R2 RSB RSB R0R0,R1R1,#256 #25

24、6 RSB RSB R0R0,R2R2,R3R3,LSL#1LSL#1ARM 指令系统第25页/共112页26RSC指令 RSCRSC指令的格式为:指令的格式为:RSCRSC条件条件S S 目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2 RSCRSC指令用于把操作数指令用于把操作数2 2减去操作数减去操作数1 1,再减去,再减去CPSRCPSR中的中的C C条件标志位的反码,并条件标志位的反码,并将结果存放到目的寄存器中。操作数将结果存放到目的寄存器中。操作数1 1应是一个寄存器,操作数应是一个寄存器,操作数2 2可以是一个寄可以是一个寄存器,被移位的寄存器,或一个立即数。该

25、指令使用进位标志来表示借位,这样存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于就可以做大于3232位的减法,注意不要忘记设置位的减法,注意不要忘记设置S S后缀来更改进位标志。后缀来更改进位标志。RSC RSC R0R0,R1R1,R2R2 ARM 指令系统第26页/共112页27AND指令 ANDAND指令的格式为:指令的格式为:ANDAND条件条件S S 目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2 ANDAND指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄

26、存器中。操作数操作数1 1应是一个寄存器,操作数应是一个寄存器,操作数2 2可以是一个寄存器,被移位的寄存器,或一可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于屏蔽操作数个立即数。该指令常用于屏蔽操作数1 1的某些位。的某些位。AND AND R0R0,R0R0,3 3 ARM 指令系统第27页/共112页28ORR指令 ORRORR指令的格式为:指令的格式为:ORRORR条件条件S S 目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2 ORRORR指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。指令用于在两个操作数上进行逻辑或运算,并把结果放置

27、到目的寄存器中。操作数操作数1 1应是一个寄存器,操作数应是一个寄存器,操作数2 2可以是一个寄存器,被移位的寄存器,或一可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数个立即数。该指令常用于设置操作数1 1的某些位。的某些位。ORR ORR R0R0,R0R0,3 3 ARM 指令系统第28页/共112页29EOR指令 EOREOR指令的格式为:指令的格式为:EOREOR条件条件S S 目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2 EOREOR指令用于在两个操作数上进行逻辑异或运算,并把结果放置到目的寄存器中。指令用于在两个操作数上进行逻辑异或运算,

28、并把结果放置到目的寄存器中。操作数操作数1 1应是一个寄存器,操作数应是一个寄存器,操作数2 2可以是一个寄存器,被移位的寄存器,或一可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于反转操作数个立即数。该指令常用于反转操作数1 1的某些位。的某些位。 EOR EOR R0R0,R0R0,3 3 ARM 指令系统第29页/共112页30BIC指令 BICBIC指令的格式为:指令的格式为:BICBIC条件条件S S 目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2 BICBIC指令用于清除操作数指令用于清除操作数1 1的某些位,并把结果放置到目的寄存器中。操作数的某些位

29、,并把结果放置到目的寄存器中。操作数1 1应是一个寄存器,操作数应是一个寄存器,操作数2 2可可以是一个寄存器,被移位的寄存器,或一个立即数。操作数以是一个寄存器,被移位的寄存器,或一个立即数。操作数2 2为为3232位的掩码,如果在掩码中设置了某一位,位的掩码,如果在掩码中设置了某一位,则清除这一位。未设置的掩码位保持不变。则清除这一位。未设置的掩码位保持不变。BIC BIC R0R0,R0R0,0 x0b0 x0bARM 指令系统第30页/共112页31乘法指令与乘加指令乘法指令与乘加指令 ARMARM微处理器支持的乘法指令与乘加指令共有微处理器支持的乘法指令与乘加指令共有6 6条,可分为

30、运算结果为条,可分为运算结果为3232位和运位和运算结果为算结果为6464位两类,与前面的数据处理指令不同,指令中的所有操作数、目的位两类,与前面的数据处理指令不同,指令中的所有操作数、目的寄存器必须为通用寄存器,不能对操作数使用立即数或被移位的寄存器,同时,寄存器必须为通用寄存器,不能对操作数使用立即数或被移位的寄存器,同时,目的寄存器和操作数目的寄存器和操作数1 1必须是不同的寄存器。必须是不同的寄存器。 乘法指令与乘加指令共有以下乘法指令与乘加指令共有以下6 6条:条:MULMUL3232位乘法指令位乘法指令MLAMLA3232位乘加指令位乘加指令SMULLSMULL6464位有符号数乘

31、法指令位有符号数乘法指令SMLALSMLAL6464位有符号数乘加指令位有符号数乘加指令UMULLUMULL6464位无符号数乘法指令位无符号数乘法指令UMLALUMLAL6464位无符号数乘加指令位无符号数乘加指令 ARM 指令系统第31页/共112页32MUL指令 MULMUL指令的格式为:指令的格式为:MULMUL条件条件SS目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2 MULMUL指令完成将操作数指令完成将操作数1 1与操作数与操作数2 2的乘法运算,并把结果放置到目的寄存器中,同时可以根据运算结果设置的乘法运算,并把结果放置到目的寄存器中,同时可以根据运算结果设置

32、CPSRCPSR中相应的条件标志位。其中,操作数中相应的条件标志位。其中,操作数1 1和操作数和操作数2 2均为均为3232位的有符号数或无符号数。位的有符号数或无符号数。MULMULR0R0,R1R1,R2R2MULSMULSR0R0,R1R1,R2R2ARM 指令系统第32页/共112页33MLA指令 MLAMLA指令的格式为:指令的格式为:MLAMLA条件条件S S 目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2,操作数,操作数3 3 MLAMLA指令完成将操作数指令完成将操作数1 1与操作数与操作数2 2的乘法运算,再将乘积加上操作数的乘法运算,再将乘积加上操作数3

33、3,并把结果放置到目的寄存器中,同,并把结果放置到目的寄存器中,同时可以根据运算结果设置时可以根据运算结果设置CPSRCPSR中相应的条件标志位。其中,操作数中相应的条件标志位。其中,操作数1 1和操作数和操作数2 2均为均为3232位的有符号数或无符位的有符号数或无符号数。号数。MLAMLAR0R0,R1R1,R2R2,R3R3MLASMLASR0R0,R1R1,R2R2,R3R3ARM 指令系统第33页/共112页34SMULL指令 SMULLSMULL指令的格式为:指令的格式为:SMULLSMULL条件条件SS目的寄存器目的寄存器LowLow,目的寄存器低,目的寄存器低HighHigh,

34、操作数,操作数1 1,操作,操作数数2 2 SMULLSMULL指令完成将操作数指令完成将操作数1 1与操作数与操作数2 2的乘法运算,并把结果的低的乘法运算,并把结果的低3232位放置到目的位放置到目的寄存器寄存器LowLow中,结果的高中,结果的高3232位放置到目的寄存器位放置到目的寄存器HighHigh中,同时可以根据运算结果中,同时可以根据运算结果设置设置CPSRCPSR中相应的条件标志位。其中,操作数中相应的条件标志位。其中,操作数1 1和操作数和操作数2 2均为均为3232位的有符号数。位的有符号数。SMULLSMULL R0R0,R1R1,R2R2,R3R3ARM 指令系统第3

35、4页/共112页35SMLAL指令 SMLALSMLAL指令的格式为:指令的格式为:SMLALSMLAL条件条件SS目的寄存器目的寄存器LowLow,目的寄存器低,目的寄存器低HighHigh,操作数,操作数1 1,操作数操作数2 2 SMLALSMLAL指令完成将操作数指令完成将操作数1 1与操作数与操作数2 2的乘法运算,并把结果的低的乘法运算,并把结果的低3232位位同目的寄存器同目的寄存器LowLow中的值相加后又放置到目的寄存器中的值相加后又放置到目的寄存器LowLow中,结果的中,结果的高高3232位同目的寄存器位同目的寄存器HighHigh中的值相加后又放置到目的寄存器中的值相加

36、后又放置到目的寄存器HighHigh中,同时可以根据运算结果设置中,同时可以根据运算结果设置CPSRCPSR中相应的条件标志位。其中,操作中相应的条件标志位。其中,操作数数1 1和操作数和操作数2 2均为均为3232位的有符号数。位的有符号数。 对于目的寄存器对于目的寄存器LowLow,在指令执行前存放,在指令执行前存放6464位加数的低位加数的低3232位,指令执位,指令执行后存放结果的低行后存放结果的低3232位。位。 对于目的寄存器对于目的寄存器HighHigh,在指令执行前存放,在指令执行前存放6464位加数的高位加数的高3232位,指令执位,指令执行后存放结果的高行后存放结果的高32

37、32位。位。SMLALSMLALR0R0,R1R1,R2R2,R3R3ARM 指令系统第35页/共112页36UMULL指令 UMULLUMULL指令的格式为:指令的格式为:UMULLUMULL条件条件SS目的寄存器目的寄存器LowLow,目的寄存器低,目的寄存器低HighHigh,操作数,操作数1 1,操作,操作数数2 2 UMULLUMULL指令完成将操作数指令完成将操作数1 1与操作数与操作数2 2的乘法运算,并把结果的低的乘法运算,并把结果的低3232位放置到目的位放置到目的寄存器寄存器LowLow中,结果的高中,结果的高3232位放置到目的寄存器位放置到目的寄存器HighHigh中,

38、同时可以根据运算结果中,同时可以根据运算结果设置设置CPSRCPSR中相应的条件标志位。其中,操作数中相应的条件标志位。其中,操作数1 1和操作数和操作数2 2均为均为3232位的无符号数。位的无符号数。UMULLUMULL R0R0,R1R1,R2R2,R3R3ARM 指令系统第36页/共112页37UMLAL指令 UMLALUMLAL指令的格式为:指令的格式为:UMLALUMLAL条件条件SS目的寄存器目的寄存器LowLow,目的寄存器低,目的寄存器低HighHigh,操作数,操作数1 1,操作数,操作数2 2 UMLALUMLAL指令完成将操作数指令完成将操作数1 1与操作数与操作数2

39、2的乘法运算,并把结果的低的乘法运算,并把结果的低3232位同位同目的寄存器目的寄存器LowLow中的值相加后又放置到目的寄存器中的值相加后又放置到目的寄存器LowLow中,结果的高中,结果的高3232位同目的寄存器位同目的寄存器HighHigh中的值相加后又放置到目的寄存器中的值相加后又放置到目的寄存器HighHigh中,同中,同时可以根据运算结果设置时可以根据运算结果设置CPSRCPSR中相应的条件标志位。其中,操作中相应的条件标志位。其中,操作数数1 1和操作数和操作数2 2均为均为3232位的无符号数。位的无符号数。 对于目的寄存器对于目的寄存器LowLow,在指令执行前存放,在指令执

40、行前存放6464位加数的低位加数的低3232位,指令执位,指令执行后存放结果的低行后存放结果的低3232位。位。 对于目的寄存器对于目的寄存器HighHigh,在指令执行前存放,在指令执行前存放6464位加数的高位加数的高3232位,指令位,指令执行后存放结果的高执行后存放结果的高3232位。位。UMLALUMLALR0R0,R1R1,R2R2,R3R3ARM 指令系统第37页/共112页38程序状态寄存器访问指令 ARMARM微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送数据,程序状微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送数据

41、,程序状态寄存器访问指令包括以下两条:态寄存器访问指令包括以下两条:MRSMRS程序状态寄存器到通用寄存器的数据传送程序状态寄存器到通用寄存器的数据传送指令指令MSRMSR通用寄存器到程序状态寄存器的数据传送通用寄存器到程序状态寄存器的数据传送指令指令ARM 指令系统第38页/共112页39程序状态寄存器(PSRPSR)处理指令 MRS/MSRMRS/MSRMRS 状态寄存器的内容读取到通用寄存器MSR 立即数或通用寄存器内容写到状态寄存器的制定区域MSR cond _, #immed_8rMSR cond _, rmfields:c控制域(PSR7:0)x扩展域(PSR15:8)s状态域(P

42、SR23:16)f标志域(PSR31:24)ARM 指令系统第39页/共112页40MRS指令 MRSMRS指令的格式为:指令的格式为:MRSMRS条件条件 通用寄存器,程序状态寄存器(通用寄存器,程序状态寄存器(CPSRCPSR或或SPSRSPSR)MRSMRS指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下几种情况:指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下几种情况:1.1. 当需要改变程序状态寄存器的内容时,可用当需要改变程序状态寄存器的内容时,可用MRSMRS将程序状态寄存器的内容读入通用寄存器,修改后再写回将程序状态寄存器的内容读入通用寄

43、存器,修改后再写回程序状态寄存器。程序状态寄存器。2.2. 当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存。后保存。MRSMRSR0R0,CPSRCPSRMRSMRSR0R0,SPSRSPSRARM 指令系统第40页/共112页41MSR指令 MSRMSR指令的格式为:指令的格式为:MSRMSR条件条件 程序状态寄存器(程序状态寄存器(CPSRCPSR或或SPSRSPSR)_ ,操作数,操作数 MSRMSR指令用于将操作数的内容传送到程序状态寄存器的特

44、定域中。其中,指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中,操作数可以为通用寄存器或立即数。操作数可以为通用寄存器或立即数。 用于设置程序状态寄存器中需用于设置程序状态寄存器中需要操作的位,要操作的位,3232位的程序状态寄存器可分为位的程序状态寄存器可分为4 4个域:个域:位位3131:2424为条件标志位域,用为条件标志位域,用f f表示;表示;位位2323:1616为状态位域,用为状态位域,用s s表示;表示;位位1515:88为扩展位域,用为扩展位域,用x x表示;表示;位位77:00为控制位域,用为控制位域,用c c表示;表示; 该指令通常用于恢复或改变程序状态寄存器的

45、内容,在使用时,该指令通常用于恢复或改变程序状态寄存器的内容,在使用时,一般要在一般要在MSRMSR指令中指明将要操作的域。指令中指明将要操作的域。MSRMSRCPSRCPSR,R0R0MSRMSRCPSR_cCPSR_c,R0R0ARM 指令系统第41页/共112页42加载/存储指令及批量数据加载/存储指令 ARMARM微处理器支持加载微处理器支持加载/ /存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。常用的加载存储指令如下:传送到寄存器,存储指令则完成相反的

46、操作。常用的加载存储指令如下:LDRLDR字数据加载指令字数据加载指令LDRBLDRB字节数据加载指令字节数据加载指令LDRHLDRH半字数据加载指令半字数据加载指令STRSTR字数据存储指令字数据存储指令STRBSTRB字节数据存储指令字节数据存储指令STRHSTRH半字数据存储指令半字数据存储指令LDMLDM批量数据加载指令批量数据加载指令STMSTM批量数据存储指令批量数据存储指令ARM 指令系统第42页/共112页43加载/ /存储指令(LDR/STR/LDM/STM)(LDR/STR/LDM/STM)LDR/STR:采用寄存器间接寻址寄存器间接寻址和基变址寻址的方式1.零偏移;LDR

47、 r0, r1STR r0, r12.程序相对偏移;LDR r0, =0 x123456783.后索引偏移;LDR r0, r13, #0 x04LDR r1, r13, #0 x04ARM 指令系统第43页/共112页44加载/ /存储指令(LDR/STR/LDM/STM)(LDR/STR/LDM/STM)4.前索引偏移;OPcond Rd, Rn, offset !Offset 就是数据处理指令中的第二操作数;就是数据处理指令中的第二操作数;!为一个可选的后缀,即是否修改!为一个可选的后缀,即是否修改RnRn为为R15时不能选择该后缀;时不能选择该后缀;LDR r0, r1, #0 x04

48、LDR r0, r1, #0 x04!LDR r0, r1, r2, ASR #0 x04!ARM 指令系统第44页/共112页45LDM/STMLDM/STM可以传送R0-R15R0-R15的任意组合 OP cond mode Rn!, reglistmode:IA每次传送后地址加1FD 满递减堆栈IB每次传送前地址加1ED 空递减堆栈DA每次传送后地址减1FA 满递增堆栈DB每次传送前地址减1EA 空递增堆栈ARM 指令系统第45页/共112页46LDM/STMLDM/STM后缀描述! 回写使能标志回写使能标志 是否拷贝是否拷贝SPSR到到CPSRLDMIA r0, r1, r2, r3,

49、 r4LDMIA r0!, r1, r2, r3, r4STMFD r13!, r0, r4-r7, LR;子程序入口子程序入口LDMFD r13!, r0, r4-r7, PC;子程序返回子程序返回ARM 指令系统第46页/共112页47LDRLDR指令 LDRLDR指令的格式为:指令的格式为:LDRLDR条件条件 目的寄存器,目的寄存器, LDRLDR指令用于从存储器中将一个指令用于从存储器中将一个3232位的字数据传送到目的寄存器中。位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取该指令通常用于从存储器中读取3232位的字数据到通用寄存器,然后位的字数据到通用寄存器,然后对数据

50、进行处理。当程序计数器对数据进行处理。当程序计数器PCPC作为目的寄存器时,指令从存储器作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计中比较常用,且寻址方式灵活多样,请读者认真掌握。在程序设计中比较常用,且寻址方式灵活多样,请读者认真掌握。 LDR LDR R0R0,R1 R1 LDR LDR R0R0,R1R1,R2 R2 LDR LDR R0R0,R1R1,8 8 LDR LDR R0R0,R1R1,R2 R2 ! ARM 指令系统第47页/共112页48LDRB指令

51、LDRBLDRB指令的格式为:指令的格式为:LDRLDR条件条件B B 目的寄存器,目的寄存器, LDRBLDRB指令用于从存储器中将一个指令用于从存储器中将一个8 8位的字节数据传送到目的寄存器中,同时将寄位的字节数据传送到目的寄存器中,同时将寄存器的高存器的高2424位清零。该指令通常用于从存储器中读取位清零。该指令通常用于从存储器中读取8 8位的字节数据到通用寄存位的字节数据到通用寄存器,然后对数据进行处理。当程序计数器器,然后对数据进行处理。当程序计数器PCPC作为目的寄存器时,指令从存储器作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。中读取的

52、字数据被当作目的地址,从而可以实现程序流程的跳转。LDRB LDRB R0R0,R1 R1 LDRB LDRB R0R0,R1R1,88 ARM 指令系统第48页/共112页49LDRH指令 LDRHLDRH指令的格式为:指令的格式为:LDRLDR条件条件H H 目的寄存器,目的寄存器, LDRHLDRH指令用于从存储器中将一个指令用于从存储器中将一个1616位的半字数据传送到目的寄存器中,同时将位的半字数据传送到目的寄存器中,同时将寄存器的高寄存器的高1616位清零。该指令通常用于从存储器中读取位清零。该指令通常用于从存储器中读取1616位的半字数据到通用位的半字数据到通用寄存器,然后对数据

53、进行处理。当程序计数器寄存器,然后对数据进行处理。当程序计数器PCPC作为目的寄存器时,指令从存作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。LDRH LDRH R0R0,R1 R1 LDRH LDRH R0R0,R1R1,8 8 LDRH LDRH R0R0,R1R1,R2R2 ARM 指令系统第49页/共112页50STR指令 STRSTR指令的格式为:指令的格式为:STRSTR条件条件 源寄存器,源寄存器, STRSTR指令用于从源寄存器中将一个指令用于从源寄存器中将一个3232位的字

54、数据传送到存储器中。该指令在程序设计中比较常用,且寻址方位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令式灵活多样,使用方式可参考指令LDRLDR。STRSTRR0R0,R1R1,8 8STRSTRR0R0,R1R1,88ARM 指令系统第50页/共112页51STRB指令 STRBSTRB指令的格式为:指令的格式为:STRSTR条件条件B B 源寄存器,源寄存器, STRBSTRB指令用于从源寄存器中将一个指令用于从源寄存器中将一个8 8位的字节数据传送到存储器中。该字节数据为源寄存器中的低位的字节数据传送到存储器中。该字节数据为源寄存器中的低8

55、8位。位。STRB STRB R0R0,R1 R1 STRB STRB R0R0,R1R1,88 ARM 指令系统第51页/共112页52STRH指令 STRHSTRH指令的格式为:指令的格式为:STRSTR条件条件H H 源寄存器,源寄存器, STRHSTRH指令用于从源寄存器中将一个指令用于从源寄存器中将一个1616位的半字数据传送到存储器中。该半字数据为源寄存器中的低位的半字数据传送到存储器中。该半字数据为源寄存器中的低1616位。位。STRH STRH R0R0,R1 R1 STRH STRH R0R0,R1R1,88 ARM 指令系统第52页/共112页53批量数据加载/存储指令 A

56、RMARM微处理器所支持批量数据加载微处理器所支持批量数据加载/ /存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。常用的加载存储指令如下:的操作。常用的加载存储指令如下:1.1.LDMLDM批量数据加载指令批量数据加载指令2.2.STMSTM批量数据存储指令批量数据存储指令 ARM 指令系统第53页/共112页54LDMLDM(或STM

57、STM)指令 LDMLDM(或(或STMSTM)指令的格式为:)指令的格式为:LDMLDM(或(或STMSTM) 条件条件类型类型 基址寄存器基址寄存器 ! ,寄存器列表,寄存器列表 LDMLDM(或(或STMSTM)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的内容入栈或出栈送数据,该指令的常见用途是将多个寄存器的内容入栈或出栈 LDM LDM R0!, r0-r4R0!, r0-r4ARM 指令系统第54页/共112页55 类型 为以下

58、几种情况IAIA每次传送后地址加每次传送后地址加1 1;IBIB每次传送前地址加每次传送前地址加1 1;DADA每次传送后地址减每次传送后地址减1 1;DBDB每次传送前地址减每次传送前地址减1 1;FDFD满递减堆栈;满递减堆栈;EDED空递减堆栈;空递减堆栈;FAFA满递增堆栈;满递增堆栈;EAEA空递增堆栈;空递增堆栈;ARM 指令系统第55页/共112页56后缀 ! 为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。器的内容不改变。 基址寄存器不

59、允许为基址寄存器不允许为R15R15,寄存器列表可以为,寄存器列表可以为R0R0R15R15的任意组合。的任意组合。 为可选后缀,当指令为为可选后缀,当指令为LDMLDM且寄存器列表中包含且寄存器列表中包含R15R15,选用该后缀时表示:除了正常的数据传送之外,选用该后缀时表示:除了正常的数据传送之外,还将还将SPSRSPSR复制到复制到CPSRCPSR。同时,该后缀还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄。同时,该后缀还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。存器。 STMFD R13!STMFD R13!,R0R0,R4-R12R4-R12,LR

60、LR LDMFD R13!LDMFD R13!,R0R0,R4-R12R4-R12,PCPCARM 指令系统第56页/共112页57数据交换指令数据交换指令 ARMARM微处理器所支持数据交换指令能在存储器和寄存器之间交换数据。数据交换指令有如下两条:微处理器所支持数据交换指令能在存储器和寄存器之间交换数据。数据交换指令有如下两条:1.1.SWPSWP 字数据交换指令字数据交换指令2.2.SWPBSWPB字节数据交换指令字节数据交换指令ARM 指令系统第57页/共112页58SWP指令 SWPSWP指令的格式为:指令的格式为:SWPSWP条件条件 目的寄存器,源寄存器目的寄存器,源寄存器1 1

温馨提示

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

评论

0/150

提交评论