目前,我为非常大的无符号整数编写了自己的小库,用于算术和逻辑运算。为了提高性能,我决定在汇编中实现一些功能。所以这是我的问题。
在减去两个无符号整数时,当我从 0 中减去任何数字时,会设置进位标志。
但为什么在这种情况下设置进位标志?进位标志仅在发生溢出时设置,但如果我从零中减去任何数字,则不会发生溢出。
还是我错了?
最佳答案
进位标志是从最高位 (MSb) 进位或借位:
CF (bit 0) Carry flag — Set if an arithmetic operation generates a carry or a borrow out of the mostsignificant bit of the result; cleared otherwise. This flag indicates an overflow condition for unsigned-integer arithmetic. It is also used in multiple-precision arithmetic.
不要将 CF 与符号位相关联,在减法中,每当被减数(被视为无符号)小于被减数(被视为无符号)时,就会设置 CF。
这等效于溢出条件,对于有符号数,等效标志为 OF。
对于(不必要的?)视觉线索,在这个 4-5 操作中,是第二次借用,红色借用,设置了 CF
如果您从零中减去,那么自然而然地是,对于任何数字,但零本身,您将始终设置 CF,因为被减数至少设置了一位。
最后,一些指令可以让您在不影响 CF 的情况下更改符号位(参见例如逻辑运算或
neg
的行为)。
关于assembly - 当被减数为零时,为什么在减法过程中设置进位标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38166573/