sub (减法)

简述:
sub为减法指令,是substract的简写,由两操作数相减,并保存结果。

编写语法:

  1. sub dst, src

计算过程:

  1. dst <- (dst - src)

计算结果:
目标操作数减去源操作数的结果,赋值给目标操作数。

请注意:
sub指令在改变目标操作数值的同时,也会改变标志寄存器相关的值。
注意执行指令后,dst的值发生变化,src未变化。

cmp (减法)

简述:
cmp为减法指令,是compare的简写,由两操作数相减,并不保存结果。

编写语法:

  1. cmp dst, src

计算过程:

  1. 设置标志寄存器CFZFOFAFPF的值 <- dst - src

计算结果:

  1. ZF标志:当两数相等,相减结果为0时,ZF标志值为1,否则为0
  2. 无符号数比较时:
  3. 如果(ax)=(bx)则(ax)-(bx)= 0,所以:zf = 1
  4. 如果(ax)!=(bx)则 ax)-(bx)!= 0,所以:zf != 1
  5. 如果(ax)<(bx)则(ax)-(bx)将产生借位,所以:cf = 1
  6. 如果(ax)>=(bx)则(ax)-(bx)将不会产生借位,所以:cf = 0
  7. 如果(ax)>(bx)则(ax)-(bx)即不借位,结果又不为零,所以:cf = 0zf = 0
  8. 如果(ax)<=(bx)则(ax)-(bx)即可能借位,结果可能为0,所以:cf = 1zf = 1

请注意:
与sub指令不同,cmp指令不改变目标操作数的值,仅依据相减结果改变标志寄存器的相关值。
注意执行指令后,dst和src的值均未发生变化。