CF(进位标志)如何根据计算 t = a-b 设置,其中 a 和 b 是无符号整数

how does CF(Carry flag) get set according to the computation t = a-b where a and b are unsigned integers

我是 x64-64 的新手,想问一下 CF 是如何设置的?我在读一本教科书,上面写着:

CF:当最近的操作产生最高有效位的进位时使用进位标志。用于检测无符号运算的溢出。

我有两个问题:

Q1-假设我们使用了一条加法指令来执行 C 赋值 t = a+b 的等价物,其中变量 a、b 和 t 是整数(为简单起见,只有 3 位),所以对于 011(a) + 101(b) = 1000 = 000,因为我们在第四位有进位 1,所以 CF 标志将设置为1,我的理解对吗?

Q2-如果我在 Q1 中的理解是正确的,并且假设我们使用其中一个 sub 指令来执行等效于 C 赋值 t = a-b,其中 a、b 和 t 是 unsigned 整数,因为 a、b 是无符号的,我们实际上不能做 a+(-b),我不明白我们如何做 011(a) - 101 (b) 执行最高有效位?

执行减法时,进位标志通常称为“借位”。减法后,它设置是否必须从下一位借用 1(或者如果您使用小学减法方法,它会被借用)。借位标志就像那个位位置的-1:

  011     -1 211
- 101  ->  - 101
-----      -----
           B 110
  

你可以通过在参数中加零得到相同的结果,然后进位或借位将是结果的高位:

 0011 - 0101 = 0011 + (-0101) = 0011 + 1011 = 1110