ARM----比较、分支与条件指令
2017-10-19 10:53
387 查看
前言
分支说白了就是跳转,而分支与条件结合使用就是当满足一定条件后进行特定的跳转。(1)、比较指令
比较指令有CMN、CMP、TEQ、TST。有一点需要注意的是CMN与CMP是算术指令,TEQ和TST属于逻辑指令。
比较指令在执行后总是会设置标志位(N、Z、C、V), 因为条件后缀是根据被设置的标志位来判断比较结果是否满足条件的。
CMN (Compare Negative) ---- 比较负值, CMN相同于CMP, 但他允许你对负值进行比较 CMN R0, R1 ;Status = R0 - R1 CMP (Compare) ---- 之所以说CMP,CMN指令是算术指令,是因为他们对操作数进行减法操作,并且设置相应的标志位,但是不记录计算结果。CMN与CMP进行的是算术减法操作,所以会影响C -- Carry标志。 CMP R0, R1 ;Status = R0 - R1
TEQ (Test Equivalence) ---- 测试等价,TEQ对操作数进行异或(EOR)逻辑操作,来判断两个操作数是否相同。因为TEQ做的是异或运算,所以不会影响Carry标志位。 TEQ R0, R1 ;Status = R0 EOR R1 TST (Test bits) ---- 测试位,使用TST命令来检查是否设置了特定的位。TST命中令其实是将两个操作数进行按位与(AND)操作,将结果存储在标志位中。可以使用TST来测试寄存器中某些位的特定值。 TST R0, R1 ;Status = R0 AND R1
(2)、分支指令
常用的分支指令是B、BL、BX这三个指令。B Lable ;该指令表示将PC设置成Lable, 而PC就是指向下一条将要执行的指令。
BL Label ; 执行该指令说明将LR设置成PC - 4, 然后再将PC设置成Lable。
在执行BL Lable这条命令时,PC中存储的就是当前BL这条命令,而PC - 4就是上一条指令的地址,将PC - 4赋值给LR,也就是记录下跳转执行完指令后要返回的地址。
如果BL在添加上一些条件,那么BL{条件}就可以进行循环了。
BX Rd ; 该指令说明将Rd赋值给PC, 然后切换指令集(如从ARM指令集切换到Thumb指令集)。
(3)、条件后缀
上述的分支指令与条件后缀结合才能发挥其强大的功能和作用;条件后缀不能单独的使用,要和其他命令一块结合使用,然后根据条件的结果来做一些操作。
条件是否成立是根据NZCV这四个标志位来判断的,因为我们在对一些数值进行比较时,会设置相应的标志位。然后我们就可以使用这些标志位来判断条件是否成立。NZCV就是我们之前所提到的几个标志位,Z(是否为零), C(是否进位), N(是否为负), V(是否溢出)四种标准位来判断的。
EQ: Equal 等于,(Z = 1) NE: Not Equal 不等于 (Z = 0) CS: Carry Set 有进位 (C = 1) HS: (unsigned Higher Or Same) 同CS (C = 1) CC: (Carry Clear) 没有进位 (C = 0) LO: (unsigned Lower) 同CC (C = 0) MI: (Minus) 结果小于0 (N = 1) PL: (Plus) 结果大于等于0 (N = 0) VS: (oVerflow Set) 溢出 (V = 1) VC: (oVerflow Clear) 无溢出 (V = 0) HI : (unsigned Higher) 无符号比较,大于 (C = 1 & Z = 0) LS: (unsigned Lower or Same) 无符号比较,小于等于 (C = 0 & Z = 1) GE: (signed Greater than or Equal) 有符号比较,大于等于 (N = V) LT: (signed Less Than) 有符号比较,小于 (N != V) GT: (signed Greater Than) 有符号比较,大于 (Z = 0 & N = V) LE: (signed Less Than or Equal) 有符号比较,小于等于 (Z = 1 | N != V) AL: (Always) 无条件,默认值 NV: (Never) 从不执行
相关文章推荐
- ARM 条件码 分支指令 比较指令 程序状态寄存器(CPSR)
- arm的比较指令
- Arm 中 几个位移运算指令的比较
- arm的按条件执行指令的功能
- ARM Cortex-M 条件码 分支指令
- ARM Cortex-M 分支指令编码
- ARM 指令的条件码
- ARM汇编中的:比较指令--CMN / CMP / TEQ / TST
- arm的分支(跳转)指令
- (2) arm 指令条件码
- ARM指令的条件码
- ARM中的条件执行指令 (IT指令)
- ARM中状态转移指令+条件执行+内存操作
- ARM指令的条件说明
- Android ARM指令比较难以理解问题总结
- ARM裸机程序开发12指令条件码的使用
- ARM条件执行指令练习题
- 【实验】ARM系统结构实验之Arm分支指令
- ARM 指令的条件码
- ARM指令中的条件代码