AR指令集大全_第1页
AR指令集大全_第2页
AR指令集大全_第3页
AR指令集大全_第4页
AR指令集大全_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、ARM 汇编指令集FoldTable of Contents跳转指令B 指令BL 指令BX 指令BLX 指令数据处理指令MOV 传送MVN 求反CMP 比较CMN 负数比较TST 测试(按位的与运算)TEQ 测试相等(按位的异或运算)ADD 相加ADC 带进位相加SUB 相减SBC 带进位减法RSB 逆向减法RSC 逆向带进位减AND 逻辑位与ORR 逻辑位或EOR 指令 逻辑位 异或BIC 位清零DCD 分配一个或者多个内存word,四字节对齐乘法指令与乘加指令程序状态寄存器访问指令MRS 将程序状态寄存器的内容传送到通用寄存器中MSR 将操作数的内容传送到程序状态寄存器的特定域中加载/存储

2、指令LDRLDRBLDRH 指令异常产生指令SWIBKPT跳转指令跳转指令用于实现程序流程的跳转在 ARM 程序中有以下两种方法可以实现程序流程的跳转:1 .使用专门的跳转指令2 .直接向程序计数器PC(R15)写入跳转地址值。通过向程序计数器PC写入跳转地址值可以实现在 4GB 的地址空间中的任意跳转在跳转之前结合使用MOV LRPC 等类似指令可以保存将来的返回地址值从而实现在4GB 连续的线性地址空间的子程序调用。ARM 指令集中的跳转指令可以完成从当前指令向前或向后的32MB 的地址空间的跳转包括以下 4 条指令:B 指令B 指令的格式为:B 条件 目标地址B 指令是最简单的跳转指令。

3、一旦遇到一个B 指令 ARM 处理器将立即跳转到给定的目标地址从那里继续执行。注意存储在跳转指令中的实际值是相对当前PC值的一个偏移量而不是一个绝对地址它的值由汇编器来计算(参考寻址方式中的相对寻址)。?它是24 位有符号数左移两位后有符号扩展为32 位表示的有效偏移为26 位 (前后32MB 的地址空间)。 ?以下指令:B Label ; 程序无条件跳转到标号Label 处执行CMP R1 #0;当 CPSR寄存器中的Z条件码置位时程序跳转到标号Label 处执行BEQ LabelBL 指令BL 指令的格式为:BL 条件 目标地址BL 是另一个跳转指令但跳转之前会在寄存器R14中保存 PC的

4、当前内容因此可以通过将R14的内容重新加载到PC中来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本但常用的手 段。 以下指令:BL Label ; 当程序无条件跳转到标号Label 处执行时同时将* 当前的PC值 * 保存到 R14( LR)中BX 指令BX 指令的格式为:BX 条件 目标地址BX 指令跳转到指令中所指定的目标地址目标地址处的指令既可以是ARM 指令也可以是Thumb 指令。BLX 指令BLX 指令的格式为:BLX 目标地址BLX 指令从 ARM 指令集跳转到指令中所指定的目标地址并将处理器的工作状态有ARM 状态切换到Thumb 状态该指令同时将PC的当

5、前内容保存到寄存器R14中。因此当子程序使用Thumb 指令集而调用者使用 ARM 指令集时可以通过BLX 指令实现子程序的调用和处理器工作状态的切换。同时子程序的返回可以通过将寄存器R14 值复制到PC中来完成。数据处理指令数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等:?数据传送指令用于在寄存器和存储器之间进行数据的双向传输。?算术逻辑运算指令完成常用的算术与逻辑的运算该类指令不但将运算结果保存在目的寄存器中同时更新CPSR中的相应条件标志位。?比较指令不保存运算结果只更新CPSR中相应的条件标志位。MOV 传送MOV 指令的格式为:MOV 条件 S 目的寄存器源操作数MOV

6、 指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中 S选项决定指令的操作是否影响CPSR中条件标志位的值当没有S时指令不更新CPSR中条件标志位的值。指令示例:MOV R1R0; 将寄存器R0 的值传送到寄存器R1MOV PCR14; 将寄存器R14的值传送到PC常用于子程序返回MOV R1R0LSL#3 ; 将寄存器R0 的值左移3位后传送到R1MVN 求反MVN 指令的格式为:MVN 条件 S 目的寄存器源操作数MVN 指令可完成从另一个寄存器、被移位的寄存器、或将一个立即数加载到目的寄存器。与 MOV 指令不同之处是在传送之前按位被取反了即把一个被取反的值传送

7、到目的寄存器中。其中 S决定指令的操作是否影响CPSR中条件标志位的值当没有S时指令不更新CPSR中条件标志位的值。指令示例:MVN R0#0; 将立即数0 取反传送到寄存器R0中完成后R0=-1CMP 比较CMP 指令的格式为:CMP 条件 操作数 1 操作数 2CMP 指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较同时更新CPSR 中条件标志位的值。该指令进行一次减法运算但不存储结果只更改条件标志位。标志位表示的是操作数1 与操作数2的关系(大、小、相等)例如当操作数1 大于操作操作数2 则此后的有GT 后缀的指令将可以执行。指令示例:CMP R1R0 ;将寄存器R1 的值

8、与寄存器R0 的值相减并根据结果设置CPSR的标志位CMP R1#100;将寄存器R1 的值与立即数100相减并根据结果设置CPSR的标志位CMN 负数比较CMN 指令的格式为:CMN 条件 操作数 1 操作数 2CMN 指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较同时更新CPSR 中条件标志位的值。该指令实际完成操作数1 和操作数2相加并根据结果更改条件标志位。指令示例:CMN R1R0 ; 将寄存器R1 的值与寄存器R0 的值相加并根据结果设置CPSR的标志位CMN R1#100; 将寄存器R1 的值与立即数100相加并根据结果设置CPSR的标志位TST 测试(按位

9、的与运算)TST指令的格式为:TST条件 操作数 1 操作数 2TST 指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算并根据运算结果更新CPSR中条件标志位的值。操作数 1 是要测试的数据而操作数2 是一个位掩码该指令一般用来检测是否设置了特定的位。指令示例:TST R1# 1 ;用于测试在寄存器R1 中是否设置了最低位(表示二进制数)TST R1#0xffe ; 将寄存器R1 的值与立即数0xffe 按位与并根据结果设置CPSR的标志位TEQ 测试相等(按位的异或运算)TEQ 指令的格式为:TEQ 条件 操作数 1 操作数 2TEQ 指令用于把一个寄存器的内容和另一个

10、寄存器的内容或立即数进行按位的异或运算并根据运算结果更新CPSR中条件标志位的值。该指令通常用于比较操作数1 和操作数2 是否相等。指令示例:TEQ R1R2 ;将寄存器R1 的值与寄存器R2的值按位异或并根据结果设置CPSR的标志位ADD 相加ADD 指令的格式为:ADD 条件 S 目的寄存器操作数1 操作数 2ADD 指令用于把两个操作数相加并将结果存放到目的寄存器中。操作数 1 应是一个寄存器操作数2 可以是一个寄存器被移位的寄存器或一个立即数。指令示例:ADDADDADDR0R1R2R0R1#256R0R2R3LSL#1; R0 = R1 + R2; R0 = R1 + 256; R0

11、 = R2 + (R3 << 1)ADC带进位相加ADC 指令的格式为:ADC 条件 S 目的寄存器操作数1 操作数 2ADC 指令用于把两个操作数相加再加上CPSR中的C条件标志位的值并将结果存放到目的寄存器中。它使用一个进位标志位这样就可以做比32 位大的数的加法注意不要忘记设置S后缀来更改进位标志。操作数 1 应是一个寄存器操作数2 可以是一个寄存器被移位的寄存器或一个立即数。128 位数的加法第一个数由高到低存放在寄存器R7 R4 第二个数由R11 R8 运算结果由高到低存放在寄存器R3 R0:ADDS R0R4R8ADCS R1R5R9ADCS R2R6R10ADC R3

12、R7R11; 加低端的字 ; 加第二个字带进位 ; 加第三个字带进位 ; 加第四个字带进位SUB 相减SUB 指令的格式为:SUB 条件 S 目的寄存器操作数1 操作数 2SUB 指令用于把操作数1 减去操作数2并将结果存放到目的寄存器中。操作数 1 应是一个寄存器操作数2 可以是一个寄存器被移位的寄存器或一个立即数。该指令可用于有符号数或无符号数的减法运算。指令示例:SUB R0R1R2SUB R0R1#256SUB R0R2R3LSL#1; R0 = R1 - R2; R0 = R1 - 256; R0 = R2 - (R3 << 1)SBC 带进位减法SBC指令的格式为:SB

13、C条件S 目的寄存器操作数1 操作数 2SBC指令用于把操作数1 减去操作数2再减去CPSR中的C条件标志位的反码并将结果存放到目的寄存器中。操作数1 应是一个寄存器操作数2 可以是一个寄存器被移位的寄存器或一个立即数。该指令使用进位标志来表示借位这样就可以做大于32 位的减法注意不要忘记设置S 后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。指令示例:SUBC R0R1R2 ;R0 = R1 - R2 - ! C并根据结果设置CPSR的进位标志位RSB 逆向减法RSB 指令的格式为:RSB条件 S 目的寄存器操作数1 操作数 2RSB 指令称为逆向减法指令用于把操作数2 减去操

14、作数1 并将结果存放到目的寄存器中。操作数 1 应是一个寄存器操作数2 可以是一个寄存器被移位的寄存器或一个立即数。该指令可用于有符号数或无符号数的减法运算。指令示例:RSB R0R1R2 ; R0 = R2 R1RSB R0R1#256 ; R0 = 256 R1RSB R0R2R3LSL#1 ; R0 = (R3 ? 1) - R2RSC 逆向带进位减RSC指令的格式为:RSC条件 S 目的寄存器操作数1 操作数 2RSC指令用于把操作数 2减去操作数1 再减去 CPSR中的 C条件标志位的反码并将结果存放到目的寄存器中。操作数1 应是一个寄存器操作数2 可以是一个寄存器被移位的寄存器或一

15、个立即数。该指令使用进位标志来表示借位这样就可以做大于32 位的减法注意不要忘记设置S 后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。指令示例:RSC R0R1R2 ;R0 = R2 R1 - ! CAND 逻辑位与AND 指令的格式为:AND 条件 S 目的寄存器操作数1 操作数 2AND 指令用于在两个操作数上进行逻辑与运算并把结果放置到目的寄存器中。操作数 1 应是一个寄存器操作数2 可以是一个寄存器被移位的寄存器或一个立即数。该指令常用于屏蔽操作数1 的某些位。指令示例:AND R0R0 3 ;该指令保持R0的 0、 1 位其余位清零。ORR 逻辑位或ORR 指令的格式

16、为:ORR条件S 目的寄存器操作数1 操作数 2ORR 指令用于在两个操作数上进行逻辑或运算并把结果放置到目的寄存器中。操作数1 应是一个寄存器操作数2 可以是一个寄存器被移位的寄存器或一个立即数。该指令常用于设置操作数 1 的某些位。指令示例:ORR R0R0 3 ;该指令设置R0的 0、 1 位其余位保持不变。EOR 指令逻辑位 异或EOR 指令的格式为:EOR 条件 S 目的寄存器操作数1 操作数 2EOR 指令用于在两个操作数上进行逻辑异或运算并把结果放置到目的寄存器中。操作数 1 应是一个寄存器操作数2 可以是一个寄存器被移位的寄存器或一个立即数。该指令常用于反转操作数1 的某些位。

17、指令示例:EOR R0R0 3 ;该指令反转R0的 0、 1 位其余位保持不变。BIC 位清零BIC 指令的格式为:BIC 条件 S 目的寄存器操作数1 操作数 2BIC 指令用于清除操作数1 的某些位并把结果放置到目的寄存器中。操作数1 应是一个寄存器操作数2 可以是一个寄存器被移位的寄存器或一个立即数。操作数2 为 32位的掩码如果在掩码中设置了某一位则清除这一位。未设置的掩码位保持不变。指令示例:BIC R0R01011 ;该指令清除R0 中的位 0、 1、和3 其余的位保持不变。DCD 分配一个或者多个内存word,四字节对齐ltorgdata1 DCD 1520data2 DCD m

18、em06 + 4 ;mem06 是一个 label 的地址* DCDU ,同 DCD ,但是不做对齐处理乘法指令与乘加指令ARM 微处理器支持的乘法指令与乘加指令共有6 条可分为运算结果为32 位和运算结果为64位两类与前面的数据处理指令不同指令中的所有操作数、目的寄存器必须为通用寄存器不能对操作数使用立即数或被移位的寄存器同时目的寄存器和操作数1 必须是不同的寄存器。乘法指令与乘加指令共有以下6 条:1、 MUL 指令(相乘)MUL 指令的格式为:MUL 条件 S 目的寄存器操作数1 操作数 2MUL 指令完成将操作数1 与操作数2 的乘法运算并把结果放置到目的寄存器中同时可以根据运算结果设

19、置CPSR中相应的条件标志位。其中操作数1 和操作数2均为 32位的有符号数或无符号数。 指令示例:MUL R0R1R2 ;R0 = R1 ×R2MULS R0R1R2 ;R0 = R1 × R2同时设置CPSR中的相关条件标志位2、 MLA 指令(带累加的相乘)MLA 指令的格式为:MLA 条件 S 目的寄存器操作数1 操作数 2 操作数 3MLA 指令完成将操作数1 与操作数2 的乘法运算再将乘积加上操作数3 并把结果放置到目的寄存器中同时可以根据运算结果设置CPSR中相应的条件标志位。其中操作数1 和操作数2 均为32 位的有符号数或无符号数。指令示例:MLA R0R

20、1R2R3 ;R0 = R1 × R2 + R3MLAS R0R1R2R3 ;R0 = R1 × R2 + R3 同时设置CPSR中的相关条件标志位3、 SMULL 指令SMULL 指令的格式为:SMULL 条件 S 目的寄存器Low 目的寄存器High 操作数 1 操作数 2SMULL 指令完成将操作数1 与操作数2 的乘法运算并把结果的低32 位放置到目的寄存器Low 中结果的高32 位放置到目的寄存器High 中同时可以根据运算结果设置CPSR中相应的条件标志位。其中操作数1 和操作数2 均为32位的有符号数。指令示例:SMULL R0R1R2R3 ;R0 = ( R

21、2 × R3)的低32位;R1 = ( R2 × R3)的高32位4、 SMLAL 指令SMLAL 指令的格式为:SMLAL 条件 S 目的寄存器Low 目的寄存器High 操作数 1 操作数 2SMLAL 指令完成将操作数1 与操作数2 的乘法运算并把结果的低 32 位同目的寄存器Low中的值相加后又放置到目的寄存器Low 中结果的高32位同目的寄存器High 中的值相加后又放置到目的寄存器High 中同 时可以根据运算结果设置CPSR中相应的条件标志位。其中操作数 1 和操作数2均为 32位的有符号数。对于目的寄存器Low 在指令执行前存放64 位加数的低32 位指令执

22、行后存放结果的低32 位。对于目的寄存器High 在指令执行前存放64位加数的高32位指令执行后存放结果的高32位。指令示例:SMLAL R0R1R2R3 ;R0 = ( R2 × R3)的低32位 R0;R1 = ( R2 × R3)的高32位 R15、 UMULL 指令UMULL 指令的格式为:UMULL 条件 S 目的寄存器Low 目的寄存器High 操作数 1 操作数 2UMULL 指令完成将操作数1 与操作数2 的乘法运算并把结果的低32 位放置到目的寄存器Low 中结果的高32 位放置到目的寄存器High 中同时可以根据运算结果设置CPSR中相应的条件标志位。其

23、中操作数1 和操作数2 均为32位的无符号数。指令示例:UMULL R0R1R2R3 ;R0 = ( R2 × R3)的低32位;R1 = ( R2 × R3)的高32位6、 UMLAL 指令UMLAL 指令的格式为:UMLAL 条件 S 目的寄存器Low 目的寄存器High 操作数 1 操作数 2UMLAL 指令完成将操作数1 与操作数2 的乘法运算并把结果的低 32 位同目的寄存器Low中的值相加后又放置到目的寄存器Low 中结果的高32位同目的寄存器High 中的值相加后又放置到目的寄存器High 中同 时可以根据运算结果设置CPSR中相应的条件标志位。其中操作数 1

24、 和操作数2均为32位的无符号数。对于目的寄存器Low 在指令执行前存放64 位加数的低32 位指令执行后存放结果的低32 位。对于目的寄存器High 在指令执行前存放64位加数的高32位指令执行后存放结果的高32位。指令示例:UMLAL R0R1R2R3 ;R0 = ( R2 × R3)的低 32位 R0;R1 = ( R2 × R3)的高 32位 R1程序状态寄存器访问指令MRS 将程序状态寄存器的内容传送到通用寄存器中MRS 指令的格式为:MRS条件 通用寄存器程序状态寄存器(CPSR或 SPSR)MRS 指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用

25、在以下两种情况: . 当需要改变程序状态寄存器的内容时可用MRS 将程序状态寄存器的内容读入通用寄存器修改后再写回程序状态寄存器。 . 当在异常处理或进程切换时需要保存程序状态寄存器的值可先用该指令读出程序状态寄存器的值然后保存。指令示例:MRS R0CPSR ;传送CPSR的内容到R0MRS R0SPSR ;传送SPSR的内容到R0MSR 将操作数的内容传送到程序状态寄存器的特定域中MSR 指令的格式为:MSR条件 程序状态寄存器(CPSR或 SPSR) _域 操作数MSR 指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中操作数可以为通用寄存器或立即数。域 用于设置程序状态寄存器中

26、需要操作的位32位的程序状态寄存器可分为 4个域:位31 :24为条件位域用f表示;位23:16为状态位域用s表示;位15:8 为扩展位域用x表示;位 7: 0 为控制位域用c表示 ;该指令通常用于恢复或改变程序状态寄存器的内容在使用时一般要在MSR 指令中指明将要操作的域。指令示例:MSR CPSRR0 ;传送R0的内容到CPSRMSR SPSRR0 ;传送R0的内容到SPSRMSR CPSR_cR0 ;传送R0的内容到SPSR但仅仅修改CPSR中的控制位域加载/存储指令ARM 微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据加载指令用于将存储器中的数据传送到寄存器存储指令则完成相

27、反的操作。常用的加载存储指令如下:LDRLDR 指令的格式为:LDR 条件 目的寄存器<存储器地址> <存储器地址调整>LDR 指令用于从存储器中将一个32 位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32 位的字数据到通用寄存器然后对数据进行处理。当程序计数器PC作为目的寄存器时指令从存储器中读取的字数据被当作目的地址从而可以实现程序流程的跳转。该指令在程序设计中比较常用且寻址方式灵活多样请读者认真掌握。指令示例:LDR R0R1; 将存储器地址为R1 的字数据读入寄存器R0。LDR R0R1R2; 将存储器地址为R1+R2 的字数据读入寄存器R0。LD

28、R R0R1#8; 将存储器地址为R1+8 的字数据读入寄存器R0。LDR R0R1R2 !;将存储器地址为R1+R2 的字数据读入寄存器R0并将新地址R1 R2写入 R1 。LDR R0R1 8 !;将存储器地址为R1+8的字数据读入寄存器R0并将新地址R1 8写入R1。LDR R0R1R2; 将存储器地址为R1 的字数据读入寄存器R0并将新地址R1 R2写入 R1LDR R0R1R2LSL 2! ;将存储器地址为R1 R2× 4的字数据读入寄存器R0并将新地址R1 R2× 4 写入R1 。LDR R0R1R2LSL 2;将存储器地址为R1 的字数据读入寄存器R0并将新地

29、址R1 R2×4写入 R1。LDRBLDRB 指令的格式为:LDR 条件 B 目的寄存器<存储器地址>LDRB 指令用于从存储器中将一个8 位的字节数据传送到目的寄存器中同时将寄存器的高24位清零。该指令通常用于从存储器中读取8 位的字节数据到通用寄存器然后对数据进行处理。当程序计数器PC作为目的寄存器时指令从存储器中读取的字数据被当作目的地址从而可以实现程序流程的跳转。指令示例:LDRB R0R1 ; 将存储器地址为R1 的字节数据读入寄存器R0并将 R0 的高 24位清零。LDRB R0R1 8 ;将存储器地址为R1 8的字节数据读入寄存器R0并将 R0 的高 24位

30、清零。LDRH 指令LDRH 指令的格式为:LDR 条件 H 目的寄存器<存储器地址>LDRH 指令用于从存储器中将一个16 位的半字数据传送到目的寄存器中同时将寄存器的高16 位清零。该指令通常用于从存储器中读取16 位的半字数据到通用寄存器然后对数据进行处理。当程序计数器PC 作为目的寄存器时指令从存储器中读取的字数据被当作目的地址从而可以实现程序流程的跳转。指令示例:LDRH R0R1 ; 将存储器地址为R1 的半字数据读入寄存器R0并将 R0 的高16位清零。LDRH R0R1 8 ;将存储器地址为R1 8的半字数据读入寄存器R0并将 R0的高 16位清零。LDRH R0R

31、1R2 ; 将存储器地址为R1 R2 的半字数据读入寄存器R0 并将 R0的高 16位清零。4、 STR 指令STR 指令的格式为:STR条件 源寄存器<存储器地址>STR 指令用于从源寄存器中将一个32 位的字数据传送到存储器中。该指令在程序设计中比较常用且寻址方式灵活多样使用方式可参考指令LDR 。指令示例:STR R0R1 8 ;将R0中的字数据写入以R1 为地址的存储器中并将新地址R18写入R1。STR R0R1 8 ;将R0中的字数据写入以R18为地址的存储器中。5、 STRB 指令STRB 指令的格式为:STR条件 B 源寄存器<存储器地址>STRB 指令用

32、于从源寄存器中将一个8 位的字节数据传送到存储器中。该字节数据为源寄存器中的低8 位。指令示例:STRB R0R1 ; 将寄存器R0 中的字节数据写入以R1 为地址的存储器中。STRB R0R1 8 ; 将寄存器R0 中的字节数据写入以R1 8 为地址的存储器中。6、 STRH 指令STRH 指令的格式为:STR条件 H 源寄存器<存储器地址>STRH 指令用于从源寄存器中将一个16 位的半字数据传送到存储器中。该半字数据为源寄存器中的低16 位。指令示例:STRH R0R1 ; 将寄存器R0 中的半字数据写入以R1 为地址的存储器中。STRH R0R1 8 ; 将寄存器R0 中的

33、半字数据写入以R1 8 为地址的存储器中。六、批量数据加载/存储指令。ARM 微处理器所支持批量数据加载/存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数据批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器批量数据存储指令则完成相反的操作。常用的加载存储指令如下:LDM(或STM )指令LDM (或STM)指令的格式为:LDM (或 STM) 条件 类型 基址寄存器! 寄存器列表 LDM (或STM)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据该指令的常见用途是将多个寄存器的内容入栈或出栈。其中 类型 为以下几种情况:IA 每次传送

34、后地址加1;IB 每次传送前地址加1;DA 每次传送后地址减1;DB 每次传送前地址减1;FD 满递减堆栈;ED 空递减堆栈;FA 满递增堆栈;EA 空递增堆栈; ! 为可选后缀若选用该后缀则当数据传送完毕之后将最后的地址写入基址寄存器否则基址寄存器的内容不改变。基址寄存器不允许为R15 寄存器列表可以为R0 R15 的任意组合。 为可选后缀当指令为LDM 且寄存器列表中包含R15选用该后缀时表示:除了正常的数据传送之外还将SPSR复制到CPSR。同时该后缀还表示传入或传出的是用户模式下的寄存器而不是当前模式下的寄存器。指令示例:STMFD R13!R0R4-R12LR ; 将寄存器列表中的寄

35、存器(R0R4到 R12LR)存入堆栈。LDMFD R13!R0R4-R12PC ; 将堆栈内容恢复到寄存器(R0R4到 R12LR)。七、数据交换指令1、 SWP 指令SWP 指令的格式为:SWP条件 目的寄存器源寄存器1源寄存器2SWP 指令用于将源寄存器2 所指向的存储器中的字数据传送到目的寄存器中同时将源寄存器1 中的字数据传送到源寄存器2 所指向的存储器中。显然当源寄存器1 和目的寄存器为同一个寄存器时指令交换该寄存器和存储器的内容。指令示例:SWP R0R1R2 ; 将 R2 所指向的存储器中的字数据传送到R0 同时将 R1 中的字数据传送到R2 所指向的存储单元。SWP R0R0

36、R1 ; 该指令完成将R1 所指向的存储器中的字数据与R0中的数据交换。2、 SWPB 指令SWPB 指令的格式为:SWP条件 B 目的寄存器源寄存器1源寄存器2SWPB 指令用于将源寄存器2所指向的存储器中的字节数据传送到目的寄存器中目的寄存器的高24清零同时将源寄存器1 中的字节数据传送到源寄存器2所指向的存储器中。显然当源寄存器 1 和目的寄存器为同一个寄存器时指令交换该寄存器和存储器的内容。指令示例:SWPB R0R1R2 ; 将 R2 所指向的存储器中的字节数据传送到R0R0的高24位清零同时将R1中的低 8 位数据传送到R2 所指向的存储单元。SWPB R0R0R1 ;该指令完成将

37、R1 所指向的存储器中的字节数据与R0 中的低 8位数据交换。八、移位指令1、 LSL(或 ASL)LSL (或ASL )的格式为:通用寄存器LSL (或ASL ) 操作数LSL (或ASL )可完成对通用寄存器中的内容进行逻辑(或算术)的左移操作按操作数所指定的数量向左移位低位用零来填充。其中操作数可以是通用寄存器也可以是立即数(031)。操作示例MOV R0 R1 LSL #2 ; 将 R1 中的内容左移两位后传送到R0 中。2、 LSRLSR 的格式为:通用寄存器LSR 操作数LSR 可完成对通用寄存器中的内容进行右移的操作按操作数所指定的数量向右移位左端用零来填充。其中操作数可以是通用

38、寄存器也可以是立即数(0 31)。操作示例:MOV R0 R1 LSR #2 ; 将 R1 中的内容右移两位后传送到R0 中左端用零来填充。3、 ASRASR 的格式为:通用寄存器ASR 操作数ASR 可完成对通用寄存器中的内容进行右移的操作按操作数所指定的数量向右移位左端用第31 位的值来填充。其中操作数可以是通用寄存器也可以是立即数(0 31)。操作示例:MOV R0 R1 ASR #2 ; 将 R1 中的内容右移两位后传送到R0中左端用第31 位的值来填充。4、 RORROR的格式为:通用寄存器ROR 操作数ROR可完成对通用寄存器中的内容进行循环右移的操作按操作数所指定的数量向右循环移

39、位左端用右端移出的位来填充。其中操作数可以是通用寄存器也可以是立即数(0 31)。显然当进行32 位的循环右移操作时通用寄存器中的值不改变。操作示例:MOV R0 R1 ROR #2 ; 将 R1 中的内容循环右移两位后传送到R0中。5、 RRXRRX 的格式为:通用寄存器RRX 操作数RRX 可完成对通用寄存器中的内容进行带扩展的循环右移的操作按操作数所指定的数量向右循环移位左端用进位标志位C 来填充。其中操作数可以是通用寄存器也可以是立即数( 0 31)。 操作示例: MOV R0 R1 RRX #2 ; 将 R1 中的内容进行带扩展的循环右移两位后传送到R0中。九、协处理器指令1、 CDP 指令CDP 指令的格式为:CDP 条件 协处理器编码协处理器操作码1 目的寄存器源寄存器1 源寄存器2 协处理器操作码 2。CDP 指令用于ARM 处理器通知ARM 协处理器执行特定的操作若协处理器不能成功完成特定的操

温馨提示

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

评论

0/150

提交评论