【发布时间】:2019-04-16 01:04:55
【问题描述】:
在处理二进制减法和 NZCV 标志位时,我遇到了一种似乎有点不直观的情况。
考虑以下值
0xF7 0b 1111 0111
0xFF 0b 1111 1111
如果这些都被认为是 8B 值,其中
0x000000F7 0b 0000 .... 0000 1111 0111
0x000000FF 0b 0000 .... 0000 1111 1111
减去后的结果是
0x FF FF FF F8 0b 1111 .... 1000
我明白这个结果是如何找到的,但我不明白为什么没有为这个操作设置进位位。
据我所知,在借用 MSB 时会设置进位位,这里不是这样吗?
【问题讨论】:
-
减 0xff 与加 0x1 相同。并且添加 0x1 不应为您的示例设置进位位。顺便说一句,您的问题是关于哪个 CPU 架构? ARM?
-
ARM M0+,这是 2 的补码吗?
-
在 ARM 上,进位位被反转以进行减法运算。因此,如果没有发生借位,则设置进位,反之亦然。