二进制减法,进位没有设置?
Binary subtraction, carry bit not set?
在处理二进制减法和 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时设置了进位位,这里不是这样吗?
带进位的ARM减法指令(SBC、RSC)将进位标志(C)解释为:
0: means borrow
1: means no borrow
所以在你的计算中,MSB 是借来的,进位没有设置!
在处理二进制减法和 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时设置了进位位,这里不是这样吗?
带进位的ARM减法指令(SBC、RSC)将进位标志(C)解释为:
0: means borrow
1: means no borrow
所以在你的计算中,MSB 是借来的,进位没有设置!