cmp指令:比较

cmp指令,和sub指令的最大的不同点就是影响标志位 不储存结果

1、当前汇编指令为cmp ecx,edx
2、当前ecx寄存器中的地址为00000000,edx寄存器中的地址00000001,相当于ecx = ecx-edx
3、单步步过

结果发现ecx寄存器中没有变化

1、当前汇编指令为cmp eax,ecx
2、当前eax寄存器中的地址为00000001,ecx寄存器中的地址00000001,相当于 eax = eax-ecx
3、单步步过

结果发现ecx寄存器中没有变化,但是发现Z标志位发生了变化 变为了1,也可以说明了当cmp指令为两个相减为0的时候,那么Z标志位为1

如何进行对字符串的比较呢,这里自己理解的是对寄存器中的地址中的值进行比较比如如下

再进行重新设置EIP然后单步步过,结果如下,发现Z标志位变0,所以大小不一致

同样的,cmp影响的不只是Z标志位,之前S标志位是根据正负数来判断的,这里同样生效
1、当前汇编指令为cmp eax,ecx
2、当前eax寄存器中的地址为00000000,ecx寄存器中的地址00000001,相当于 eax = eax-ecx
3、单步步过

结果发现,S标志位为1,因为相减为负数

当然,cmp指令不只是寄存器与寄存器之间,还可以寄存器与地址的值之间,比如:
1、当前汇编指令为cmp eax,[402000]
2、设置地址402000中的值为01
3、单步步过

结果Z为1 那么相减结果为0,S为0,那么结果不是负数


test指令:对两个操作数进行逻辑(按位)与操作,同时影响符号标志位、零标志位和奇偶标志位

test指令就是进行与运算,如果与运算结果为0那么Z标志位为1,反之为0

1、当前汇编指令为cmp eax,ecx
2、设置EAX寄存器地址为00000001,ECX寄存器地址00000010,
3、单步步过

发现Z标志位为1,说明是相等,00000001的二进制为‭‭00000001,‬ 00000010的二进制位为00010000,与运算结果为00000000‬‬

学习:CMP/TEST比较指令的更多相关文章

  1. Java学习-035-JavaWeb_004 -- JSP include 指令

    inclue 指令是将不同的文件插入到 JSP 网页中,这些文件可以是文本文件.HTML文件.JSP 文件,指令语法如下: <%@include file="相对路径"%&g ...

  2. Java学习-034-JavaWeb_003 -- JSP page 指令

    前文对 JSP 的基础知识进行了初步的讲解,此文主要讲述 JSP page 指令. page 指令用于定义页面的多种属性,例如:脚本语言.编码方式.导入的 Java 包等,page 执行的语法如下: ...

  3. AngularJS1.X学习笔记8-自定义指令(上)

    AngulaJS的指令是一种非常强大的特性,一个ng-repeat就能让我们非常方便的展示一个数据列表,指令相当于是一个组件,为我们将一些东西封装起来了,提供了复用的可能性.个人认为自定义指令还是比较 ...

  4. angular学习笔记(三十)-指令(10)-require和controller

    本篇介绍指令的最后两个属性,require和controller 当一个指令需要和父元素指令进行通信的时候,它们就会用到这两个属性,什么意思还是要看栗子: html: <outer‐direct ...

  5. angular学习笔记(三十)-指令(7)-compile和link(2)

    继续上一篇:angular学习笔记(三十)-指令(7)-compile和link(1) 上一篇讲了compile函数的基本概念,接下来详细讲解compile和link的执行顺序. 看一段三个指令嵌套的 ...

  6. angular学习笔记(三十)-指令(7)-compile和link(1)

    这篇主要讲解指令中的compile,以及它和link的微妙的关系. link函数在之前已经讲过了,而compile函数,它和link函数是不能共存的,如果定义了compile属性又定义link属性,那 ...

  7. angular学习笔记(三十)-指令(6)-transclude()方法(又称linker()方法)-模拟ng-repeat指令

    在angular学习笔记(三十)-指令(4)-transclude文章的末尾提到了,如果在指令中需要反复使用被嵌套的那一坨,需要使用transclude()方法. 在angular学习笔记(三十)-指 ...

  8. angular学习笔记(三十)-指令(5)-link

    这篇主要介绍angular指令中的link属性: link:function(scope,iEle,iAttrs,ctrl,linker){ .... } link属性值为一个函数,这个函数有五个参数 ...

  9. angular学习笔记(三十)-指令(2)-restrice,replace,template

    本篇主要讲解指令中的 restrict属性, replace属性, template属性 这三个属性 一. restrict: 字符串.定义指令在视图中的使用方式,一共有四种使用方式: 1. 元素: ...

  10. JVM学习笔记——字节码指令

    JVM学习笔记——字节码指令 字节码 0与 1是计算机仅能识别的信号,经过0和1的不同组合产生了数字之上的操作.另外,通过不同的组合亦产生了各种字符.同样,可以通过不同的组合产生不同的机器指令.在不同 ...

随机推荐

  1. etcd备份与恢复

    目录 备份 恢复 备份 通常而言,etcd都是集群部署,其实并不需要额外备份,但实在是架不住猪队友误操作. 写一个简单的etcd备份脚本如下: #!/bin/bash set -e exec > ...

  2. [转帖]k8s 基本使用(上)

    k8s 基本使用(上) https://www.jianshu.com/p/8d60ce1587e1 本文将介绍 k8s 中的一些最基本的命令,并辅以解释一些基本概念来方便理解,也就是说,本文是一篇偏 ...

  3. nginx location指令详解

    Nginx的HTTP配置主要包括三个区块,结构如下: http { //这个是协议级别 include mime.types; default_type application/octet-strea ...

  4. Java 8——Lambda表达式

    本篇文章不介绍Lambda的前世今生,这里只对Lambda表达的应用做详细了解.以及与内部类的差异点. Lambda表达式 Lambda表达式是Java SE 8版本中引入的新的语法糖.将功能看做方法 ...

  5. css z-index 的学习

    前言:这是笔者第一次写博客,主要是学习之后自己的理解.如果有错误或者疑问的地方,请大家指正,我会持续更新! z-index属性描述元素的堆叠顺序(层级),意思是 A 元素可以覆盖 B 元素,但是 B ...

  6. spring Boot 学习(六、Spring Boot与分布式)

    一.分布式应用在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用 全栈的Spring,Spring Boot+Spring Cloud 分布式系统: 单一应用 ...

  7. React 根据条件自动计算

    1.输入框 <Item {...formItemProps} label="留房日期"> {getFieldDecorator('date', { rules: [{ ...

  8. .NET / C# EF中的基础操作(CRUD)

    查 public List<users> Querys() { datatestEntities db = new datatestEntities(); var a = db.users ...

  9. Django---CBV和FBV的使用,CBV的流程,给视图加装饰器,Request对象方法,属性和Response对象,form表单的上传

    Django---CBV和FBV的使用,CBV的流程,给视图加装饰器,Request请求对象方法,属性和Response响应对象,form表单的上传 一丶CBV和FBV       在Django中存 ...

  10. 错误排查:Cloudera Manager Agent 的 Parcel 目录位于可用空间小于 10.0 吉字节 的文件系统上。 /opt/cloudera/parcels

    临时解决办法: 点击右上角的抑制,选中抑制复选框,然后重启服务即可.