第11讲讲了剩下两个减法指令: NEG 和 CMP
NEG OP 对OP进行求补,然后将结果送入OP,操作数可以是通用寄存器和存储单元。当OP为8位-128或16位-32768时,结果为它自身。当OP为0时,CF位为0,其他时候都为1。NEG操作其实是 OP = 0 - OP。
CMP OP1, OP2 比较操作,用OP1 - OP2, 与SUB规则相同,不同之处在于不把结果送回OP1,根据标志位来判断比较的结果。ZF = 0时两操作数相等,否则不相等。当不相等时,如果是无符号数,根据CF位来判断大小;如果是有符号数,根据OF和SF来判断大小。有符号数不相等时怎么判断?如果OF = 0,无溢出,SF = 0时OP1 > OP2,否则OP1 < OP2。如果OP = 1,有溢出,SF = 0时,OP1 < OP2, 此时,OP1为负, OP2为正,SF = 1时,OP1 > OP2,此时, OP1为正, OP2为负。
剩下时间讲加减法的应用。
例: 已知 字存储单元 X, Y, Z, 将 X + (Y + Z – 25H) 送入Z中
MOV AX, Y
ADD AX, Z
SUB AX, 25H
ADD AX, X
MOV Z, AX
例: 已知双字存储单元 X, Y, Z, 将 X + (Y + Z – 25H) 送入Z中
MOV AX, Y
MOV DX, Y + 2
ADD AX, Z
ADC DX, Z + 2
SUB AX, 25H
SBB DX, 0
ADD AX, X
ADC DX, X +2
MOV Z, AX
MOV Z+2, DX