3.3.2.2 减法指令
SUB dst,src 减法指令(subtract)
执行操作: (dst) ← (dst)-(src)
SBB dst,src 带借位减法指令(subtract with borrow)
执行操作: (dst) ← (dst)-(src)-CF
DEC opr 减1指令(decrement)
执行操作: (opr) ← (opr)-1
CMP opr1,opr2 比较指令(compare)
执行操作: (opr1)-(opr2),根据相减结果设置条件码,但不回送结果
以上指令除DEC指令不影响CF外,其他都影响条件码。与加法类似,SF和ZF分别表示减法结果的符号以及为零的情况;CF表明无符号数相减结果溢出与否;OF表明带符号数相减结果溢出与否。但在对CF和OF位的设置方法上减法和加法有所不同,下面对此做进一步说明:
CF=1 二进制减法运算中最高有效位向高位有借位(被减数<减数,不够减的情况)
CF=0 二进制减法运算中最高有效位向高位无借位(被减数≥减数,够减的情况)
OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同
OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同
NEG opr 求补指令(negate)
执行操作: (opr) ← -(opr),
求补操作即把操作数变为与其符号相反的数: 。
机器在执行求补指令时,把操作数各位求反后末位加1,因此执行的操作也可表示为:
(opr) ← 0FFFFH-(opr)+1
NEG指令的条件码设置方法为:
CF=1 不为0的操作数求补时
CF=0 为0的操作数求补时
OF=1 当求补运算的操作数为-128(字节)或-32768(字)时
OF=0 当求补运算的操作数不为-128(字节)或-32768(字)时
|