如何通过减去两个8位数来计算借位标志?
我发现这个借用标志描述,但我仍然无法理解如何做到这一点?
如果减去两个数字,也会设置进位(借位)标志 要求借入减去的最重要(最左边)位。
我想我需要一个班轮。因为使用循环计算是一个很大的瓶颈。很高兴看到解释借旗如何运作。
感谢。
答案 0 :(得分:4)
如果您要减去x - y
,则y > x
同时将y
和x
视为无符号数量时,会发生借入(随身携带)。因此你应该对C代码没问题:
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
你可以看看,例如the HC12 Reference中的SBA指令。这恰好使用了上面给出的b
的表达式。
答案 1 :(得分:3)
a - b
完全等同于a + (-b)
,实际上它通常是用硬件计算的。因此,借用标志实际上等同于carry flag。
在您的情况下,进位标志的值等于结果的第9位的值。