简介:
工作中我们有时会查看反汇编代码,查看代码时经常会看到指令后面回带着EQ/NE,CS/HS,MI/PL 等后缀,这些后缀通常在跳转指令的后面,对应这些后缀的条件说明如下。
这些跳转指令会根据执行指令时的NZCV状态寄存器的状态来作为条件判定的依据,对应的条件和NZCV状态位的关系上表已有对应关系。
这些跳转后缀的指令通常配合CMP,或者 带S 的指令更新APSR 的NZCV 标志来执行条件跳转。以下是CMP 和 带S条件更新的指令说明。
以下是带S指令的条件跳转。
其中16552 行加载数据16553计算更新NZCV标志,16554行判断条件为负数跳转跟if(!(flags & LEFT)) 代码也是吻合的。
以上16622 行回使用cmp 质量更新NZCV 标志,然后执行条件指令。
其他使用场景也是跟上述类似,先更新NZCV 标志,然后更具更新的状态执行条件跳转。