为什么CMP(比较)有时会在8086汇编中设置进位标志?

fau*_*aul 8 assembly subtraction x86-16

我一直在阅读并使用8086指令集,它说CMP(比较)可以设置进位标志.我知道比较会减去两个操作数,但我想知道是否有人可以在这种情况下提供一个例子.

我只是无法掌握添加数字和负数的想法会设置进位标志.我已经阅读了借旗,但我只需要一个例子来澄清我对比较指令的理解.

另外,据我所知,如果3 - 5 = -2会设置负标志...何时进位?

Spa*_*ile 6

  • 进位标志在导致下溢或溢出的操作之后设置.例如,从6减去10将导致下溢并设置进位标志.类似地,将1添加到寄存器的最大值将导致溢出并设置进位标志.
  • 进位标志也在移位操作期间被修改,它被设置为从目标寄存器移出的最后一位的值.
  • 位测试将测试位的值放入进位标志.执行此操作的操作码:BT,BTC,BTR和BTS.
  • 直接影响Carry Flag的说明:CLC,CMC和STC.
  • 在比较期间,进位标志被设置,就好像已经减去了两个操作数一样.
  • 在否定(NEG)期间,除非操作数为零,否则设置进位标志,在这种情况下它被清除.