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
我是 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