zoukankan      html  css  js  c++  java
  • 《汇编语言(第三版)》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
  • 相关阅读:
    hdu1852 Beijing 2008
    hdu-2582 f(n)---找规律+素数筛法
    hdu-1452 Happy 2004---因子和+逆元
    LightOJ-1028 Trailing Zeroes (I)---因子数目
    hdu1215 七夕节---因子和
    因子和&&因子数
    hdu-1492 The number of divisors(约数) about Humble Numbers---因子数公式
    hdu-2136 Largest prime factor---巧用素数筛法
    欧拉函数
    BZOJ4418: [Shoi2013]扇形面积并
  • 原文地址:https://www.cnblogs.com/zhangjiuding/p/8338147.html
Copyright © 2011-2022 走看看