1、 VS V置位 溢出 VC V清零 没有溢出 HI C置位,Z清零 无符号数大于 LS C清零,Z置位 无符号数小于或等于 GE N等于V 带符号数大于或等于 LT N不等于V 带符号数小于 GT Z清零,(N等于V) 带符号数大于 LE Z置位或(N不等于V) 带符号数小于或等于 AL 任何 无条件执行(指令默认条件) 跳转指令跳转指令用于实 现程序流程的跳转,在ARM 程序中有两种方法可以实现程式流程的跳转: 使用专门的跳转指令。 直接向程序计数器PC 写入跳转地址值。透过向程序计数 器PC 写入跳转地址值,可以实现在4GB 的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类
2、似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性26位地址空间的子程序使用。ARM 指令集中的跳转指令可以完成从当前 指令向前或向后的32MB的地址空间的跳转,包括以下4 条指令: B 跳转指令。 BL 带返回的跳转指令。 BLX 带返回和状态切换的跳转指令。 BX 带状态切换的跳转指令。 B指令 B指令的语法为: B 条件目标地址B 指令是最简单的跳转指令。一旦遇到一个B 指令,ARM 处理器将立即跳转到给定的目标地 址,从那里继续执行。注意存储在跳转指令中的实际值是相对当前PC 值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻 址)。它是24 位
3、有符号数,左移两位后有符号扩充为32 位,表示的有效偏移为26 位(前后32MB 的地址空间)。BL 指令BL 指令的语法为:BL条件 目标地址BL 是另一个跳转指令,但跳转之前,会在 寄存器R14 中保存PC 的当前内容,因此,可以透过将R14 的内容重新加载到PC 中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序使用的一个基本但常用的手段。以下指令:BL Label ;当程序无条件跳转到标号Label 处执行时,同时将当前的PC 值保存到R14 中BLX 指令BLX 指令的语法为:BLX 目标地址BLX 指令从ARM 指令集跳转到指令中所指定的目标 地址,并将处理器的工作状态有
4、ARM 状态切换到Thumb状态,该指令同时将PC 的当前内容保存到寄存器R14 中。因此,当子程序使用Thumb 指令集,而用户使用ARM 指令集时,可以透过BLX 指令实现子程序的使用和处理器工作状态的切换。同时,子程程序的返回可以透过将寄存器R14 值复制到PC 中来完成。BX 指令BX 指令的语法为:BX条件 目标地址BX 指令跳转到指令中所指定的目标地址, 目标地址处的指令既可以是ARM指令,也可以是Thumb 指令。 数据处理指令数据处理指令可 分为数据传送指令、算术逻辑运算指令和比较指令等。数据传送指令用于在寄存器和内存之间进行数据的双向传输。算术逻辑运算指令完成常用的算术与逻辑
5、的运 算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR 中的相应条件标志位。比较指令不保存运算结果,只更新CPSR中相应的条件标志位。1. MOV 指令MOV 指令的语法为:MOV条件S 目的寄存器,来源操作数MOV 指令可完成从另一个寄存器、被移位 的寄存器或将一个立即数载入到目的寄存器。其中S 选项决定指令的操作是否影响CPSR 中条件标志位的值,当没有S 时指令不更新CPSR 中条件标志位的值。指令范例:MOV R1,R0 ;将寄存器R0 的值传送到寄存器R1MOV PC,R14 ;将寄存器R14 的值传送到PC,常用于子程序返回MOV R1,R0,LSL3 ;将寄存器R0
6、 的值左移3 位后传送到R12. MVN 指令MVN 指令的语法为:MVN条件S 目的寄存器,源操作数MVN 指令可完成从另一个寄存器、被移位 的寄存器、或将一个立即数载入到目的寄存器。与MOV 指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。其中S 决定指令的操作是否影响CPSR 中条件标志位的值,当没有S 时指令不更新CPSR 中条件标志位的值。MVN R0,0 ;将立即数0 取反传送到寄存器R0 中,完成后R0=-13. CMP 指令CMP 指令的语法为:CMP条件 操作数1,操作数2CMP 指令用于把一个寄存器的内容和另一 个寄存器的内容或立即数进行比较,同
7、时更新CPSR 中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数1 与操作数2 的关系(大、小、相等),例如,当操作数1 大于操作操作数2,则此后的有GT 后缀的指令将可以执行。CMP R1,R0 ;将寄存器R1 的值与寄存器R0 的值相减,并根据结果设定CPSR 的标志位CMP R1,100 ;将寄存器R1 的值与立即数100 相减,并根据结果设定CPSR 的标志位4. CMN 指令CMN 指令的语法为:CMN条件 操作数1,操作数2CMN 指令用于把一个寄存器的内容和另一 个寄存器的内容或立即数取反后进行比较,同时更新CPSR 中条件标志位的值
8、。该指令实际完成操作数1 和运算元2 相加,并根据结果更改条件标志位。CMN R1,R0 ;将寄存器R1 的值与寄存器R0 的值相加,并根据结果设定CPSR 的标志位CMN R1,100 ;将寄存器R1 的值与立即数100 相加,并根据结果设定CPSR 的标志位5. TST 指令TST 指令的语法为:TST条件 操作数1,操作数2TST 指令用于把一个寄存器的内容和另一 个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR 中条件标志位的值。操作数1 是要测试的数据,而操作数2 是一个位屏蔽,该指令一般用来测试是 否设定了特定的位。30TST R1,1 ;用于测试在寄存器R1 中
9、是否设定了最低位(表示二进制 数)TST R1,0xffe ;将寄存器R1 的值与立即数0xffe 按位与,并根据结果设定CPSR 的标志位6. TEQ 指令TEQ 指令的语法为:TEQ条件 操作数1,操作数2TEQ 指令用于把一个寄存器的内容和另一 个寄存器的内容或立即数进行按位的互斥运算,并根据运算结果更新CPSR 中条件标志位的值。该指令通常用于比较操作数1 和操作数2 是否相等。TEQ R1,R2 ;将寄存器R1 的值与寄存器R2 的值按位互斥,并根据结果设定CPSR 的标志位7. ADD 指令ADD 指令的语法为:ADD条件S 目的寄存器,操作数1,操作数2ADD 指令用于把两个操作
10、数相加,并将结 果存放到目的寄存器中。操作数1应是一个寄存器,操作数2 可以是一个寄存器,被移位的寄存器,或一个立即数。ADD R0,R1,R2 ; R0 = R1 + R2ADD R0,R1,#256 ; R0 = R1 + 256ADD R0,R2,R3,LSL#1 ; R0 = R2 + (R3 1)8. ADC 指令ADC 指令的语法为:ADC条件S 目的寄存器,操作数1,操作数2ADC 指令用于把两个操作数相加,再加上CPSR 中的C 条件标志位的值,并将结果存放到目的 寄存器中。它使用一个进位标志位,这样就可以做比32 位大的数的加法,注意不要忘记设定S 后缀来更改进位标志。操作数
11、1 应是一个寄存器,操作数2 可以是一个寄存器,被移位的寄存器,或一个立即数。以下指令序列完成两个128 位数的加法,第一个数由高到低存放 在寄存器R7-R4,第二个数由高到低存放在寄存器R11-R8,运算结果由高到低存放在寄存器R3-R0:ADDS R0,R4,R8 ; 加低端的字ADCS R1,R5,R9 ; 加第二个字,带进位ADCS R2,R6,R10 ; 加第三个字,带进位ADC R3,R7,R11 ; 加第四个字,带进位9. SUB 指令SUB 指令的语法为:SUB 条件S 目的寄存器,操作数1,操作数2SUB 指令用于把操作数1 减去操作数2,并将结果存放到目的寄存器中。运算元1
12、 应是一个寄存器,操作数2 可以是一个寄存器,被移位的寄存器, 或一个立即数。该指令可用于有符号数或无符号数的减法运算。SUB R0,R1,R2 ; R0 = R1 - R2SUB R0,R1,#256 ; R0 = R1 - 256SUB R0,R2,R3,LSL#1 ; R0 = R2 - (R3 10. SBC 指令SBC 指令的语法为:SBC条件S 目的寄存器,操作数1,操作数2SBC 指令用于把操作数1 减去操作数2,再减去CPSR 中的C 条件标志位的反码,并将结果存放到目 的寄存器中。操作数1 应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位
13、标志来表示借位,这样就可以做大于32 位的减法,注意不要忘记设定S 后缀来更改进位标志。该指令可用于有 符号数或无符号数的减法运算。SUBS R0,R1,R2 ; R0 = R1 - R2 - !C,并根据结果设定CPSR 的进位标志位3211. RSB 指令RSB 指令的语法为:RSB条件S 目的寄存器,操作数1,操作数2RSB 指令称为逆向减法指令,用于把操作 数2 减去操作数1,并将结果存放到目的寄存器中。RSB R0,R1,R2 ; R0 = R2 R1RSB R0,R1,#256 ; R0 = 256 R1RSB R0,R2,R3,LSL#1 ; R0 = (R3 1) - R212. RSC 指令RSC 指令的语法为:RSC条件S 目的寄存器,操作数1,操作数2RSC 指令用于把操作数2 减去操作数1,再减去CPSR 中的C 条件标志位的反码,并将结果存放到目 的寄存器中。RSC R0,R1,R2 ; R0 = R2 R1 - !C13. AND 指令AND 指令的语法为:AND条件S 目的寄存器,操作数1,操作数2AND 指令用于在两个操作数上进行逻辑与 运算,并把结果放置到目的寄存器中。操作数1 应是一个寄存器,操作数2 可以是
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1