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 *****
谢谢楼主分享,辛苦了 不错,每次分析程序都会遇到很多次。给大家讲讲让大家清晰清晰! 看看 学习{:5_121:} 我好像都没用这个cmp这个指令诶 谢谢分享原理 好好学习,天天向上,学习了 学习汇编语句 狗年发发发,狗年旺旺旺!