加法指令 ADD(addition)
指令对标志位的影响:
CF=1最高有效位向高位有进位
CF=0最高有效位向高位无进位
OF=1两个同符号数相加(正数+正数或 负数+负数),结果符号与其相反。
OF=0两个不同符号数相加,或同符号数相加,结果符号与其相同。
带进位加法指令 ADC (add withcarry)
指令对标志位的影响:
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 (subtractwith 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 (unsignedmultiple) 有符号乘法指令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 (unsigneddivide)带符号数除法 IDIV (singeddivide)
指令对标志位的影响:不影响条件码。
逻辑与 AND (logicand)
指令对标志位的影响:
指令执行后 CF 和 OF 置零,AF无定义。
PF=1 结果操作数中1的个数为偶数时置1
PF=0 结果操作数中1的个数为奇数时置0
逻辑或 or (logicor)
指令对标志位的影响:
令执行后 CF 和 OF 置零,AF无定义。
PF=1 结果操作数中1的个数为偶数时置1
PF=0 结果操作数中1的个数为奇数时置0
逻辑非 NOT (logicnot)
指令对标志位的影响:对标志位无影响
异或 XOR (exclusiceor)
指令对标志位的影响:
令执行后 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 logicalleft)
指令对标志位的影响: CF=移入的数值
OF=1 当cnt=1时,移动后最高位的值发生变化。
OF=0 当cnt=1时,移动时最高位的值未发生变化。
逻辑右移 SHR (shift logicalright)
指令对标志位的影响:CF=移入的数值
OF=1 当cnt=1时,移动后最高位的值发生变化。
OF=0 当cnt=1时,移动时最高位的值未发生变化。
算术左移 SAL (shiftarithmetic left)
指令对标志位的影响:CF=移入的数值
OF=1 当cnt=1时,移动后最高位的值发生变化。
OF=0 当cnt=1时,移动时最高位的值未发生变化。
算术右移SAR (shift arithmetic right)
指令对标志位的影响:CF=移入的数值
OF=1当cnt=1时,移动后最高位的值发生变化。
OF=0 当cnt=1时,移动时最高位的值未发生变化。
循环左移 ROL (rotateleft)
指令对标志位的影响:CF=移入的数值
OF=1 当cnt=1时,移动后最高位的值发生变化。
OF=0 当cnt=1时,移动时最高位的值未发生变化。
循环右移 ROR (rotateright)
指令对标志位的影响:CF=移入的数值
OF=1 当cnt=1时,移动后最高位的值发生变化。
OF=0 当cnt=1时,移动时最高位的值未发生变化。
带进位的循环左移 RCL (rotateleft through carry)
指令对标志位的影响:CF=移入的数值。
OF=1 当cnt=1时,移动后最高位的值未发生变化。
OF=0 当cnt=1时,移动后最高位的值发生变化。
SF、ZF、PF标志位不受影响。
带进位的循环右移 RCR (rotateright through carry)
指令对标志位的影响:CF=移入的数值。
OF=1 当cnt=1时,操作数最高位的值未发生变化。
OF=0 当cnt=1时,操作数最高位的值发生变化。
SF、ZF、PF标志位不受影响。
串传送 MOVSB / MOVSW (movestring byte/word)
指令对条件码的影响:不影响条件码。
存串 STOSB / STOSW (stroefrom string byte/word)
指令对条件码的影响:不影响条件码。
取串LODSB / LODSW (loadfrom string byte/word)
指令对条件码的影响:不影响条件码。
串比较 CMPSB / CMPSW(compare string byte/word)
指令对条件码的影响:
CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
串扫描 SCASB / SCASW (scanstring byte / word)
指令对条件码的影响:
CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。
条件转移指令
指令的汇编格式及功能根据条件码的值转移:
49、JZ(JE) OPR ZF=1
50、JNZ(JNE) OPR ZF=0
51、JS OPRSF=1
52、JNS OPR SF=0
53、JO OPROF=1
54、JNO OPROF=0
55、JP OPRPF=1
56、JNP OPRPF=0
57、JC OPRCF=1
58、JNC OPR CF=0
比较两个无符号数,根据比较的结果转移
59、JB(JNAE,JC)OPRCF=1被减数小于减数则转移
60、JNB(JAE,JNC) OPRCF=0 被减数大于或等于减数则转移
61、JBE(JNA) OPRCF或ZF=1被减数小于或等于减数则转移
62、JNBE(JA) OPRCF或ZF=0被减数大于减数则转移
比较两个带符号数,根据比较结果转移
63、JL/JNGE OPR SF异或OF=1被减数小于减数则转移
64、JNL/JGESF异或OF=0被减数不小于减数则转移
65、JLE/JNE(SF异或OF)与ZF=1被减数不大于减数则转移
66、JNLE/JG(SF异或OF)与ZF=0被减数大于减数则转移
根据CX寄存器的值转移
67、JCXZ(CX)=0CX内容为零则转移