lingyin 发表于 2018-3-1 12:27

CMP 和 TEST 的详解

cmp 和 test 是主要的比较命令,下面就来看一下他们两个的区别:

cmp 后面加两个操作数,结果并不保存,只是影响标志位。

cmp eax,ecx
我们来做个演示,od加载一个程序,修改指令:

并且更改eax和ecx的值,使之相等,可以看到,此时z标志位的值为0,按f7:


这时z变成了1.          cmp和sub挺像的,只是sub会将结果保存起来而已。

下面我们更改eax的值,让它小于ecx,看看会有什么变化:


我们把eax改成了9,是小于ecx的,并且z=1,s=0,f7执行:


看到变化的z和s了吗?z=0,说明eax和ecx是不相等的,s变成了1,说明eax是小于ecx的,因为s是符号标志位嘛。
所以通过cmp,然后观察标志寄存器的状态,我们可以比较两个数的大小。

在来看一下test,test可以判断操作数是否为0,那它的原理是什么呢?
test是做的与运算,我们知道:
1 and 1 = 1
1 and 0 = 0
0 and 1 = 0
0 and 0 = 0
**** Hidden Message *****






xc3590 发表于 2018-3-1 12:48

谢谢楼主分享,辛苦了

Shark恒 发表于 2018-3-1 13:01

不错,每次分析程序都会遇到很多次。给大家讲讲让大家清晰清晰!

a1277638217 发表于 2018-3-1 13:22

看看                        

1106541927 发表于 2018-3-1 13:35

学习{:5_121:}

狐白小刺客 发表于 2018-3-1 13:42

我好像都没用这个cmp这个指令诶

byh3025 发表于 2018-3-1 14:01

谢谢分享原理

redapple2008 发表于 2018-3-1 15:27

好好学习,天天向上,学习了

逍遥枷锁 发表于 2018-3-1 15:29

学习汇编语句

bgy9682 发表于 2018-3-2 13:41

狗年发发发,狗年旺旺旺!
页: [1] 2 3 4 5 6 7 8
查看完整版本: CMP 和 TEST 的详解