如何通过减去两个 8 位数字来计算借位标志?
我找到了这个借用标志描述,但我仍然不明白该怎么做?
如果两个数字的减法需要借位到减去的最高有效位(最左边),则也设置进位(借位)标志。
我想我需要一个班轮。因为使用循环计算是很大的瓶颈。很高兴看到借用标志如何工作的解释。
谢谢。
如何通过减去两个 8 位数字来计算借位标志?
我找到了这个借用标志描述,但我仍然不明白该怎么做?
如果两个数字的减法需要借位到减去的最高有效位(最左边),则也设置进位(借位)标志。
我想我需要一个班轮。因为使用循环计算是很大的瓶颈。很高兴看到借用标志如何工作的解释。
谢谢。
如果您要减去,则在两者都被视为无符号数量x - y
时发生借用(进位) 。因此,您应该可以使用 C 代码:y > x
y
x
b = (unsigned)y > (unsigned)x;
如果您想要处理器实际计算它的方式,那么
x7 = x >> 7;
y7 = y >> 7;
r7 = (x - y) >> 7;
b = (~x7 & y7) | (y7 & r7) | (r7 & ~x7);
这是 2 位数字的真值表:
x y r b
00 00 00 0
00 01 11 1
00 10 10 1
00 11 01 1
01 00 01 0
01 01 00 0
01 10 11 1
01 11 10 1
10 00 10 0
10 01 01 0
10 10 00 0
10 11 11 1
11 00 11 0
11 01 10 0
11 10 01 0
11 11 00 0
您可以查看例如HC12 参考中的 SBA 指令。这完全使用了上面给出的表达式b
。
a - b
完全等价于a + (-b)
,实际上这就是它通常在硬件中计算的方式。因此,借位标志实际上等同于进位标志。
在您的情况下,进位标志的值等于结果的第 9 位的值。