【发布时间】:2018-10-30 13:37:40
【问题描述】:
在 ARM 文档 here 中,它说:
进位发生:
...如果减法的结果是正数或零...
我从this answer on SO 知道,当存在无符号下溢(即被减去的数字(减数)大于被减去的数字(被减数))时,进位标志在减法中设置。
所以考虑这个例子:
r1 = 5
r2 = 10
CMP r1, r2
比较 (CMP) 执行减法 as mentioned here,然后设置适当的标志。在这种情况下,r1-r2 = 5-10 = -5。由于这里有无符号下溢(5
ARM 文档有错吗?我有什么误解?
【问题讨论】:
-
无符号溢出是加法的msbit的进位。如果加法的 msbit 的进位和进位不同,则设置有符号溢出。逻辑使用加法来做减法。二进制补码否定 (-a) = -(a) 取反并加一,第二个操作数取反(取反),进位取反(一一)。一些架构反转进位以指示无符号借用而不是无符号溢出。
-
您链接的问答是关于 x86 的,其中进位标志用作减法的借位标志。 ARM 则相反。
-
@PeterCordes 哎呀哈哈;感谢您的澄清。 (这引起了我的困惑,fuz 的回答也澄清了)
标签: assembly arm compare carryflag