当前位置: 首页 > news >正文

汇编学习之《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指令》

相关文章:

  • vscode中的【粘滞滚动】的基本概念和作用,关闭了以后如何开启
  • 蚂蚁集团医疗AI战略启示:国产算力驱动下的医疗生态重构与场景深耕
  • WPF 浅述IsHitTestVisible属性
  • 上海某海外视频平台Android高级工程师视频一面
  • 短剧系统开发动漫短剧系统源码开发上线小程序app教程
  • K8s中CPU和Memory的资源管理
  • 实验二 Mybatis参数传递方式及特殊SQL操作
  • 钱包开发:技术、功能与安全的深度探索
  • ARM-----数据处理、异常处理、模式切换
  • Fluent-Rocky耦合插件排错(2025R1版)
  • Python 实现的运筹优化系统代码详解(整数规划问题)
  • 用户行为分析系统开发文档
  • [Linux系统编程]进程间通信—管道
  • Spark,HDFS客户端操作
  • 利用line_profiler分析函数运行时间
  • 当编程语言有了人格
  • Scala(三)
  • [leetcode]回溯法
  • 安卓 Java 中比 RxJava 更好用的多线程异步框架 MultithreadingExecutor
  • Kafka 4.0入门到熟练
  • KPL“王朝”诞生背后:AG和联赛一起迈向成熟
  • 上海首发经济“卷”到会展业,浦东签约三个年度“首展”
  • 沈阳卫健委通报“健康证”办理乱象:涉事医院已被立案查处
  • 走进“双遗之城”,领略文武风采:沧州何以成文旅新贵
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉
  • 专访|家人眼中的周碧初:用色彩写诗,实践油画“民族化”