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
  • 相关阅读:
    jsfl学习
    反射的小例子
    Tsql 递归构造连续日期序列
    无法远程链接sqlserver的解决办法
    ubuntu下安装中文输入法ibus
    vs2008设置为这个背景色
    由于登陆失败而无法启动服务mssqlserver无法启动的问题
    配置solr
    笔记本无法检测到无线信号的终极解决方案
    win7 asp.net 配置iis
  • 原文地址:https://www.cnblogs.com/zhangjiuding/p/8338147.html
Copyright © 2011-2022 走看看