test指令
它和逻辑与(and)计算方式是一样,他们两个的区别,and 会改变对象的值,test指令不会改变,但是它会改变EFL标志寄存器的ZF零位标记的值。汇编学习之《标志寄存器》-CSDN博客
我们先验证下and 对比:
先设置eax 为1,方便对比
执行 and eax, 2
可以看到eax的值变了。
我们测试test
先设置eax 为1,手动清理EFL的值为0, 方便对比
执行 test eax,2
这里可以看到EFL 的ZF 零标志位变成了1, eax的值没有变化。
既然and 和 test 都是一样的运算的方式, 那为什么还要这个运算方式呢?搞过c++应该就了解。& or &&
cmp 指令:
实际上是做的减法运算,与算数sub运算指令的区别是,cmp指令不改变作用对象的值,但还是会改变EFL标志寄存器的ZF标志位。
mov eax 1
手动设置EFL 为0
sub eax,1
这里可以看到 eax 变成了0, EFL 标志寄存器的ZF零标志位被设置成了1(零 zf=1, 非零=0)
mov eax 1
手动设置EFL 位0
cmp eax,1
其实:cmp eax,1 可以用来判断 eax 和 后面的数字是否相等,比如 ZF 位是1表示相等,否则不是。
最后补充下, cmp 指令不只是会改变ZF 的值, 其他错位CF的值也会改变
上一篇:汇编学习之《移位指令》
下一篇:汇编学习之《push , pop指令》