zoukankan      html  css  js  c++  java
  • 常用汇编指令对标志位的影响

    加法指令 ADD (addition)
    指令对标志位的影响:
                         CF=1   最高有效位向高位有进位
                         CF=0   最高有效位向高位无进位
                         OF=1   两个同符号数相加(正数+正数 或 负数+负数),结果符号与其相反。
                         OF=0   两个不同符号数相加,或同符号数相加,结果符号与其相同。
     
    带进位加法指令 ADC (add with carry)
    指令对标志位的影响:
                         CF=1   最高有效位向高位有进位
                         CF=0   最低有效位相高位无进位
                         OF=1   两个同符号数相加,结果符号与其相反,
                         OF=0   两个同符号数相加,或同符号相加,结果符号与其相同
     
    加1指令 INC (increament)
    指令对标志位的影响:
                         对CF无影响
                         OF=1   两个同符号数相加,结果符号与其相反,
                         OF=0   两个同符号数相加,或同符号相加,结果符号与其相同。
     
    减法指令 SUB (subtract)
    指令对标志位的影响:
                         CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
                         CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
                         OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
                         OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
     
    带借位减法指令 SBB (subtract with borrow)
    指令对标志位的影响:
                         CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
                         CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
                         OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
                         OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
     
    减1指令 DEC (decrement)
    指令对标志位的影响:
                         对CF无影响
                         OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
                         OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
                        
    比较指令 CMP (compare)
    指令对标志位的影响:
                         CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
                         CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
                         OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
                         OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
     
    求补指令 NEG (negate)
    指令对标志位的影响:
                         CF=1  不为0的操作数求补时
                         CF=0  为0的操作数求补时
                         OF=1    操作数为-128(字节运算)或操作数为-32768(字运算)
                         OF=0    当求补运算的操作数不为-128(字节)或-32768(字)时
     
    无符号乘法指令 MUL (unsigned multiple)    有符号乘法指令 IMUL(signed muliple)
    指令对标志位的影响:乘法指令只影响标志位CF和OF,其他条件码位无定义。
                         MUL指令的条件码设置为:
                         CF OF=0 0 乘积的高一半为0(字节操作的(AH)或字操作的(DX))
                         CF OF=1 1 乘积的高一半不为0
                         IMUL指令的条件码设置为:
                         CF OF=0 0 乘积的高一半为低一半的符号扩展.
                         CF OF=1 1 其他情况
     
    无符号数除法 DIV (unsigned divide)     带符号数除法 IDIV (singed divide)
    指令对标志位的影响:不影响条件码。
     
    逻辑与 AND (logic and)
    指令对标志位的影响:
                         指令执行后 CF 和 OF 置零,AF无定义。
                         PF=1 结果操作数中1的个数为偶数时置1
                         PF=0 结果操作数中1的个数为奇数时置0
     
    逻辑或 or (logic or)
    指令对标志位的影响:
                         令执行后 CF 和 OF 置零,AF无定义。
                         PF=1 结果操作数中1的个数为偶数时置1
                         PF=0 结果操作数中1的个数为奇数时置0
     
    逻辑非 NOT (logic not)
    指令对标志位的影响:对标志位无影响
     
    异或 XOR (exclusice or)
    指令对标志位的影响:
                         令执行后 CF 和 OF 置零,AF无定义。
                         PF=1 结果操作数中1的个数为偶数时置1
                         PF=0 结果操作数中1的个数为奇数时置0
     
    测试指令 TEST
    指令对标志位的影响:
                         令执行后 CF 和 OF 置零,AF无定义。
                         PF=1 结果操作数中1的个数为偶数时置1
                         PF=0 结果操作数中1的个数为奇数时置0
     
    逻辑左移 SHL (shift logical left)
    指令对标志位的影响:CF=移入的数值
                         OF=1 当cnt=1时,移动后最高位的值发生变化。
                         OF=0 当cnt=1时,移动时最高位的值未发生变化。
     
    逻辑右移 SHR (shift logical right)
    指令对标志位的影响:CF=移入的数值
                         OF=1 当cnt=1时,移动后最高位的值发生变化。
                         OF=0 当cnt=1时,移动时最高位的值未发生变化。
     
    算术左移 SAL (shift arithmetic left)
    指令对标志位的影响:CF=移入的数值
                         OF=1 当cnt=1时,移动后最高位的值发生变化。
                         OF=0 当cnt=1时,移动时最高位的值未发生变化。
     
    算术右移 SAR (shift arithmetic right)
    指令对标志位的影响:CF=移入的数值
                         OF=1 当cnt=1时,移动后最高位的值发生变化。
                         OF=0 当cnt=1时,移动时最高位的值未发生变化。
     
    循环左移 ROL (rotate left)
    指令对标志位的影响:CF=移入的数值
                         OF=1 当cnt=1时,移动后最高位的值发生变化。
                         OF=0 当cnt=1时,移动时最高位的值未发生变化。
     
    循环右移 ROR (rotate right)
    指令对标志位的影响:CF=移入的数值
                         OF=1 当cnt=1时,移动后最高位的值发生变化。
                         OF=0 当cnt=1时,移动时最高位的值未发生变化。
     
    带进位的循环左移 RCL (rotate left through carry)
    指令对标志位的影响:CF=移入的数值。
                         OF=1 当cnt=1时,移动后最高位的值未发生变化。
                         OF=0 当cnt=1时,移动后最高位的值发生变化。
                         SF、ZF、PF标志位不受影响。
     
    带进位的循环右移 RCR (rotate right through carry)
    指令对标志位的影响:CF=移入的数值。
                         OF=1 当cnt=1时,操作数最高位的值未发生变化。
                         OF=0 当cnt=1时,操作数最高位的值发生变化。
                         SF、ZF、PF标志位不受影响。
     
    串传送 MOVSB / MOVSW (move string byte/word)
    指令对条件码的影响:不影响条件码。
     
    存串 STOSB / STOSW (stroe from string byte/word)
    指令对条件码的影响:不影响条件码。
     
    取串LODSB / LODSW (load from string byte/word)
    指令对条件码的影响:不影响条件码。
     
    串比较 CMPSB / CMPSW (compare string byte/word)
    指令对条件码的影响:
                         CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
                         CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
                         OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
                         OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
     
    串扫描 SCASB / SCASW (scan string byte / word)
    指令对条件码的影响:
                         CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
                         CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
                         OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
                         OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
     
    条件转移指令
    指令的汇编格式及功能    根据条件码的值转移:
    49、JZ(JE) OPR        ZF=1
    50、JNZ(JNE) OPR   ZF=0
    51、JS OPR             SF=1
    52、JNS OPR           SF=0
    53、JO OPR             OF=1
    54、JNO OPR          OF=0
    55、JP OPR             PF=1
    56、JNP OPR           PF=0
    57、JC OPR             CF=1
    58、JNC OPR          CF=0
     
    比较两个无符号数,根据比较的结果转移
    59、JB(JNAE,JC)   OPR   CF=1         被减数小于减数则转移
    60、JNB(JAE,JNC) OPR   CF=0         被减数大于或等于减数则转移
    61、JBE(JNA) OPR      CF或ZF=1      被减数小于或等于减数则转移
    62、JNBE(JA) OPR      CF或ZF=0      被减数大于减数则转移
     
    比较两个带符号数,根据比较结果转移
    63、JL/JNGE OPR       SF异或OF=1           被减数小于减数则转移
    64、JNL/JGE           SF异或OF=0               被减数不小于减数则转移
    65、JLE/JNE           (SF异或OF)与ZF=1     被减数不大于减数则转移
    66、JNLE/JG           (SF异或OF)与ZF=0     被减数大于减数则转移
     
    根据CX寄存器的值转移
    67、JCXZ              (CX)=0               CX内容为零 则转移
  • 相关阅读:
    51Nod 1119 机器人走方格 V2 组合数学 费马小定理
    Codeforces Round #439 div2 869A The Artful Expedient +869B The Eternal Immortality
    51Nod 1050 循环数组最大子段和 dp
    51Nod 1009 数字1的数量 数位dp
    51Nod 1082 与7无关的数 暴力打表(埃氏筛的感觉)
    POJ 2001 Shortest Prefixes
    字典树模板
    HDU 1251 统计难题
    kmp算法模板
    HDU 2087 剪花布条
  • 原文地址:https://www.cnblogs.com/Zdelta/p/14122322.html
Copyright © 2011-2022 走看看