如何在 C 中实现借位标志

kes*_*rut 3 c

如何通过减去两个 8 位数字来计算借位标志?

我找到了这个借用标志描述,但我还是不明白该怎么做?

如果两个数字的相减需要借位到相减的最重要(最左边)位,则进位(借位)标志也会设置。

我想我需要一个班轮。因为使用循环计算是很大的瓶颈。很高兴看到解释借用标志如何工作。

谢谢。

Gen*_*ene 5

如果你减去x - y,借用(进位)发生时,y > xyx被视为无符号的数量。因此,您应该可以使用 C 代码:

b = (unsigned)y > (unsigned)x;
Run Code Online (Sandbox Code Playgroud)

如果你想要处理器实际计算这个的方式,那么

x7 = x >> 7;
y7 = y >> 7;
r7 = (x - y) >> 7;
b = (~x7 & y7) | (y7 & r7) | (r7 & ~x7);
Run Code Online (Sandbox Code Playgroud)

这是 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
Run Code Online (Sandbox Code Playgroud)

您可以查看例如HC12 参考中的 SBA 指令。这完全使用了b上面给出的表达式。