《汇编语言(第三版)》cmp指令
cmp指令
本质
cmp是比较指令,cmp的功能相当于减法。
格式
cmp 操作对象1,操作对象2
功能
计算操作对象1-操作对象2,但并不保存结果,可以根据flag标志寄存器来判断结果。
正向判断
如果(ax) = (bx) 则(ax)-(bx) = 0,所以:zf=1。
如果(ax) != (bx) 则(ax)-(bx) != 0,所以:zf=0。
如果(ax) < (bx) 则(ax)-(bx)将产生借位,所以:cf=1。
如果(ax) >=(bx) 则(ax)-(bx)不产生借位,所以:cf=0。
如果(ax) > (bx) 则(ax)-(bx) != 0,也不产生借位,所以:zf=cf=0。
如果(ax) <=(bx) 则(ax)-(bx)可能为0,也可能产生借位,所以:zf=1或zf=1。(1、3起码满足一个)
反向判断
指令cmp ax,bx 的逻辑含义是比较ax和bx的值,如果执行后:
1. zf=1 ===> (ax)=(bx)
2. zf=0 ===> (ax)!=(bx)
3. cf=1 ===> (ax)<(bx)
4. cf=0 ===> (ax)>=(bx)
5. cf=zf=0 ===> (ax)>(bx)
6. cf=1或zf=1 ===> (ax)<=(bx)
如何记忆?
1. zf是0标志寄存器,zf=1时,ax=bx;zf=0时,ax != bx。
2. cf是进位借位标志寄存器,cf=1时,ax<bx;cf=0时,ax>=bx。
3. 根据1、2组合可以推出另外两个。
CMP指令如何起作用?
cmp指令的比较结果需要通过条件转移指令来检测。
| 指令 | 解释 | 含义 | 检测的相关标志位 |
|---|---|---|---|
| je | e:equal | 等于则转移 | zf=1 |
| jne | ne:not equal | 不等于则转移 | zf=0 |
| jb | b:below | 低于则转移 | cf=1 |
| jnb | nb:not below | 不低于则转移 | cf=0 |
| ja | a:above | 高于则转移 | cf=0且zf=0 |
| jna | na:not above | 不高于则转移 | cf=1或zf=1 |
《汇编语言(第三版)》cmp指令的更多相关文章
- CMP指令(转)
刚刚看到了cmp指令,一开始有点晕.后来上网找了些资料,终于看明白了,为了方便初学者,我就简单写下我的思路吧.高手绕过,谢谢! cmp(compare)指令进行比较两个操作数的大小 例:cmp opr ...
- cmp指令
cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果.cmp指令执行后,将对标志寄存器产生影响.其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果. cmp指令格式: cmp 操作对象 ...
- cmp 指令
(lldb) disassemble -n comp2 untitled6`comp2: 0x10d065f40 <+>: pushq %rbp 0x10d065f41 <+> ...
- cmp比较指令对标志寄存器的影响
比如: mov ax,x mov bx,y cmp ax,bx cmp ax,bx的逻辑含义是比较ax,bx中的值.如果执行后: ZF=1则AX=BX ZF=0则AX!=BX CF=1则AX<B ...
- 汇编cmp比较指令详解
刚刚看到了cmp指令,一开始有点晕.后来上网找了些资料,终于看明白了,为了方便初学者,我就简单写下我的思路吧.高手绕过,谢谢! cmp(compare)指令进行比较两个操作数的大小 例:cmp opr ...
- 关于ARM中的tst、cmp、bne、beq指令
一.关于cmp的详细用法 假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H. 执行的指令是:CMP AX, BX 执行这条指令时,先做用AX中的数减去BX中的数的减法运算. 列出二进 ...
- 汇编指令之CMP, TEST指令
一.CMP指令 这一块呢,我不想上图了,汇编的博文我已经快要让我写吐了,其实也有好多我没有补充进来,比如进制,LEA指令,数据宽度,有符号,无符号的区分等等,但我真的要吐了,这些玩意我已经不是第一次写 ...
- 学习:CMP/TEST比较指令
cmp指令:比较 cmp指令,和sub指令的最大的不同点就是影响标志位 不储存结果 1.当前汇编指令为cmp ecx,edx 2.当前ecx寄存器中的地址为00000000,edx寄存器中的地址000 ...
- arm汇编指令
ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令 一.跳转指令 跳转指令用于实现程序流程的跳转 跳转指令分类 Ⅰ ...
随机推荐
- POJ 3764 DFS+trie树
题意: 给你一棵树,求树中最长的xor路径.(n<=100000) 思路: 首先我们知道 A xor B =(A xor C) xor (B xor C) 我们可以随便选一个点DFS 顺便做出与 ...
- HTML文档 html,html5,css,css3
HTML 各种标签及简单应用: http://www.w3school.com.cn 1 <p><p> 2 <br/> 3 <hr/>横线 4 < ...
- vue-cli安装步骤
vue-cli脚手架模板是基于node下的npm来完成安装的所以首先需要安装node 条件: node在4.以上,npm在3以上 安装 指令: 1.npm install -g vue-cli 在全 ...
- PHP关于注册注意的问题
1.注意转义字符的问题 get_magic_quotes_gpc()开启时,所有的 ' (单引号), " (双引号), \(反斜线) and 空字符(null)会自动转为含有反斜线的溢出字符 ...
- 防范CSRF(三)
除了可以更改微软默认的cookie的名字外,还可以更改默认的加密方法.继承IAntiForgeryAdditionalDataProvider接口,实现里面的方法即可. 采用的加密方法有加盐和使用时间 ...
- web_测试用例注意点
测试是一种思维,包括情感思维和智力思维,情感思维主要体现在一句俗语:思想决定行动上(要怀疑一切),智力思维主要体现在测试用例的设计上.具有了这样的思想,就会找出更多的bug.(^_^个人认为,不代表官 ...
- Use gdb attach pid and debug it
- mac上virtualbox创建vm需要注意启动顺序
创建好vm后,需要注意,按照下图,将vm的启动顺序设置成 硬盘,不然,你会一直处于安装的逻辑中
- You-Dont-Need-JQuery (你不需要JQuery)
看完这篇文章我才觉得真的要用JQuery ,因为实在是有些地方设计的使用太复杂了, document.querySelector() 和 Document.querySelectorAll 的确是很方 ...
- sort函数用法详解
用于C++中,对给定区间所有元素进行排序.头文件是#include <algorithm> sort函数进行快速排序,时间复杂度为n*log2n,比冒泡之类的要省时不少 Sort函数使用模 ...