欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 汇编学习之《test, cmp 指令》

汇编学习之《test, cmp 指令》

2025/4/3 5:12:35 来源:https://blog.csdn.net/u011374344/article/details/146910312  浏览:    关键词:汇编学习之《test, cmp 指令》

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指令》

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词