sub (减法)
简述:
sub为减法指令,是substract的简写,由两操作数相减,并保存结果。
编写语法:
sub dst, src
计算过程:
dst <- (dst - src)
计算结果:
目标操作数减去源操作数的结果,赋值给目标操作数。
请注意:
sub指令在改变目标操作数值的同时,也会改变标志寄存器相关的值。
注意执行指令后,dst的值发生变化,src未变化。
cmp (减法)
简述:
cmp为减法指令,是compare的简写,由两操作数相减,并不保存结果。
编写语法:
cmp dst, src
计算过程:
设置标志寄存器CF,ZF,OF,AF,PF的值 <- dst - src
计算结果:
ZF标志:当两数相等,相减结果为0时,ZF标志值为1,否则为0。
无符号数比较时:
如果(ax)=(bx)则(ax)-(bx)= 0,所以:zf = 1;
如果(ax)!=(bx)则 (ax)-(bx)!= 0,所以:zf != 1;
如果(ax)<(bx)则(ax)-(bx)将产生借位,所以:cf = 1;
如果(ax)>=(bx)则(ax)-(bx)将不会产生借位,所以:cf = 0;
如果(ax)>(bx)则(ax)-(bx)即不借位,结果又不为零,所以:cf = 0,zf = 0;
如果(ax)<=(bx)则(ax)-(bx)即可能借位,结果可能为0,所以:cf = 1,zf = 1;
请注意:
与sub指令不同,cmp指令不改变目标操作数的值,仅依据相减结果改变标志寄存器的相关值。
注意执行指令后,dst和src的值均未发生变化。