JCC

滴水逆向三期JCC

CMP指令:
指令格式:CMP R/M,R/M/IMM 不能同时为内存
CMP指令是用来比较两个值的
在这里插入图片描述
可以看到EAX的值变成了0 结果都是0的话ZF变成了0
在这里插入图片描述
我们可以看到CMP的时候,EAX的值没有变而SUB的时候EAX值变了,再看就会发现CMP的时候只改变标志寄存器的值,以后决定程序怎么走的时候,经常会涉及到比较两个数,最简单的方法就是减一下,可是你还不能把原来的数去掉,这个时候我们就会用到CMP的指令,一般的时候用于比较两个数是不是想等的,这个时候就看Z位
在这里插入图片描述
我们把ECX改成200 两个寄存器里面的值不一样,发现S位变了,S位改了说明第一个数一定比第二个数小
只要宽度一样,就可以用寄存器和内存进行比较
CMP这个指令,相当于减法,但是它只改变标志寄存器

TEST指令:
指令格式:TEST R/M,R/M/IMM
该指令在一定程序上和CMP指令时类似的,两个数值进行与操作,结果不保存,但是会改变相应标志位
与的操作表项如下:
1 and 1 = 1
1 and 0 = 0
0 and 1 = 0
0 and 0 = 0
常见用法:用这个指令,可以确定某寄存器是否等于0
TEST EAX,EAX 可以看出来某一个寄存器的值是不是空的
EAX里面如果里面有任何一个位,如果不等于0的话,与后一定会有不等于0的,什么情况自己和自己与完了是0,自己本身都是0的才是0
JCC的本质跟标志寄存器缺一不可的
JCC这里死记硬背(就是一个有选择的JUMP)

  1. JE,JZ(jump if equal)结果为零则跳转(相等时候跳转) ZF=1
  2. JNE,JNZ(jump not equal) 结果不为零的时候跳转(不想等的时候跳转) ZF=0
  3. JS 结果为负则跳转 SF=1
  4. JNS 结果为非负则跳转 SF=0
  5. JP,JPE 结果中1的个数为偶数则跳转 PF=1
  6. JNP,JPO 结果中1的个数为偶数则跳转 PF=0
  7. JO 结果溢出了则跳转 OF=1
  8. JNO 结果没有溢出则跳转 OF=0
  9. JB,JNAE 小于则跳转(无符号数) CF=1
  10. JNB,JAE 大于则跳转(无符号数)CF=0
  11. JBE,JNA 小于等于则跳转(无符号数) CF=1 or ZF=1
  12. JNBE,JA 大于则跳转(无符号数)CF=0 and ZF=0
  13. JL,JNGE 小于则跳转(有符号数) SF不等于OF
  14. JNL,JGE 大于等于则跳转(有符号数) SF=OF
  15. JLE,JNG 小于等于则跳转(有符号数) ZF=1 or SF不等于OF
  16. JNLE,JG 大于则跳转(有符号数)ZF=0 and SF=OF
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值