学习:CMP/TEST比较指令
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比较指令的更多相关文章
- Java学习-035-JavaWeb_004 -- JSP include 指令
inclue 指令是将不同的文件插入到 JSP 网页中,这些文件可以是文本文件.HTML文件.JSP 文件,指令语法如下: <%@include file="相对路径"%&g ...
- Java学习-034-JavaWeb_003 -- JSP page 指令
前文对 JSP 的基础知识进行了初步的讲解,此文主要讲述 JSP page 指令. page 指令用于定义页面的多种属性,例如:脚本语言.编码方式.导入的 Java 包等,page 执行的语法如下: ...
- AngularJS1.X学习笔记8-自定义指令(上)
AngulaJS的指令是一种非常强大的特性,一个ng-repeat就能让我们非常方便的展示一个数据列表,指令相当于是一个组件,为我们将一些东西封装起来了,提供了复用的可能性.个人认为自定义指令还是比较 ...
- angular学习笔记(三十)-指令(10)-require和controller
本篇介绍指令的最后两个属性,require和controller 当一个指令需要和父元素指令进行通信的时候,它们就会用到这两个属性,什么意思还是要看栗子: html: <outer‐direct ...
- angular学习笔记(三十)-指令(7)-compile和link(2)
继续上一篇:angular学习笔记(三十)-指令(7)-compile和link(1) 上一篇讲了compile函数的基本概念,接下来详细讲解compile和link的执行顺序. 看一段三个指令嵌套的 ...
- angular学习笔记(三十)-指令(7)-compile和link(1)
这篇主要讲解指令中的compile,以及它和link的微妙的关系. link函数在之前已经讲过了,而compile函数,它和link函数是不能共存的,如果定义了compile属性又定义link属性,那 ...
- angular学习笔记(三十)-指令(6)-transclude()方法(又称linker()方法)-模拟ng-repeat指令
在angular学习笔记(三十)-指令(4)-transclude文章的末尾提到了,如果在指令中需要反复使用被嵌套的那一坨,需要使用transclude()方法. 在angular学习笔记(三十)-指 ...
- angular学习笔记(三十)-指令(5)-link
这篇主要介绍angular指令中的link属性: link:function(scope,iEle,iAttrs,ctrl,linker){ .... } link属性值为一个函数,这个函数有五个参数 ...
- angular学习笔记(三十)-指令(2)-restrice,replace,template
本篇主要讲解指令中的 restrict属性, replace属性, template属性 这三个属性 一. restrict: 字符串.定义指令在视图中的使用方式,一共有四种使用方式: 1. 元素: ...
- JVM学习笔记——字节码指令
JVM学习笔记——字节码指令 字节码 0与 1是计算机仅能识别的信号,经过0和1的不同组合产生了数字之上的操作.另外,通过不同的组合亦产生了各种字符.同样,可以通过不同的组合产生不同的机器指令.在不同 ...
随机推荐
- Lua table concat
[1]table concat 简介 使用方式: table.concat(table, sep, start, end) 作用简介: concat是concatenate(连锁.连接)的缩写. ta ...
- TensorFlow学习笔记——cmd调用方法
由于tensorflow支持最高的python的版本和anaconda自动配置的python最新版本并不兼容,故直接用常规的在终端键入“python”会出现问题.经过尝试对激活环境,调用的过程暂总结如 ...
- FusionInsight大数据开发---Hive应用开发
Hive应用开发 了解Hive的基本架构原理 掌握JDBC客户端开发流程 了解ODBC客户端的开发流程 了解python客户端的开发流程 了解Hcatalog/webHcat开发接口 掌握Hive开发 ...
- thymeleaf是用于编写html模版的编程语言(工具语言)
一.编程语言 用于编写html模版的编程语言. thymeleaf一种命令式和声名式混合的寄生语言. html与thymeleaf的结合是dsl与命令式语言的结合. html与thymeleaf的结合 ...
- java运算符的优先级别
一.运算符的优先级 运算符按照优先级别的高低排序分别是:自加/减运算符. 算术运算符.比较运算符.逻辑运算符.赋值运算符.具体请参考下表: 顺序 运算符 1. 括号,如 ( ) 和 [ ] 2. 一元 ...
- LinkedList、ArrayList、Vector三者的关系与区别?
LinkedList.ArrayList.Vector三者的关系与区别? 区分ArrayList,Vector,LinkedList的区别 ArrayList,Vector的区别: 1.出现版本:Ar ...
- VS 安装resharper 后 无法进行UnitTest
Vs安装 Resharper后,无法进行单元测试,发现报错提示信息如下: ignored test-case is missing. rebuild the project and try again ...
- 米尔科技MPSoC开发板评测
米尔科技推出的MYD-CZU3EG开发板搭载的就是UltraScale+ MPSoC平台器件 — XCZU3EG,它集成了四核Cortex-A53 处理器,双核 Cortex-R5 实时处理单元以及M ...
- SqlServer共用表达式(CTE)With As 处理递归查询
共用表表达式(CTE)可以看成是一个临时的结果集,可以再SELECT,INSERT,UPDATE,DELETE,MARGE语句中多次引用. 一好处:使用共用表表达式可以让语句更加清晰简练. 1.可以定 ...
- 1. vue.js介绍
1. 什么是vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助 ...