减法指令
减法运算主要包括SUB,SBB,DEC,NEG和CMP指令,除DEC不影响CF标志外,其他照定义影响全部状态标志位。
1.减法指令SUB
减法指令SUB (Subtract) 使目的操作数减去源操作数, 差的结果送到目的操作数。 格式如下:
SUB reg,imm/reg/mem;减法:reg=reg-imm/reg/mem
SUB mem,imm/reg;减法:mem=mem-imm/reg
像 ADD 指令一样, SUB 指令支持寄存器与立即数、 寄存器、 存储单元, 以及存储单元与立即数、 寄存器间的减法运算, 按照定义影响6个状态标志位。 例如:
mov eax,Oaaff7348h;EAX=AAFF7348H
sub al,27h;EAX=AAFF7321H,OF=0,SF=0,ZF=0,PF=1,CF=0
sub ax,3fffh;EAX=AAFF3322H,OF=O,SF=0,ZF=0,PF=1,CF=0
sub eax,0bb000000h;EAX=EFFF3322H,OF=0,SF=1,ZF=0,PF=1,CF=1
2.带借位减法指令 SBB
带借位减法指令SBB (Subtract with Borrow) 除完成SUB 减法运算外, 还要减去借位CF,结果送到目的操作数, 按照定义影响6个状态标志位。格式如下:
SBB reg,imm/reg/mem;减法:reg=reg-imm/reg/mem-CF
SBB mem,imm/reg;减法:mem=mem-imm/reg-CF
SBB指令主要用于与SUB指令相结合实现高精度数的减法。 多于32位数据的减法需要先将两个操作数的低32位相减 (用SUB指令), 然后再减高位部分, 并从高位减去借位 (需要用SBB指令)。
3 减量指令DEC
减量指令 DEC (Decrement) 对操作数