关于带进位标志的ARM文档的困惑

tak*_*a15 5 assembly arm compare carryflag

这里的ARM文档中,它表示:

进位发生:

...如果减法的结果是正数或零...

我从这个关于SO的答案中知道,当存在无符号下溢时(即被减去(subtrahend)的数字大于从(被减数)减去的数字),进位标志设置为减法。

因此,请考虑以下示例:

r1 = 5
r2 = 10
CMP r1, r2
Run Code Online (Sandbox Code Playgroud)

比较(CMP)做减法这里提到,然后设置相应的标志。在这种情况下,r1-r2 = 5-10 = -5。由于此处未签名下溢(5 <10),因此我们希望设置进位标志。但是根据ARM文档,结果(-5)不是正数或零,因此,不应设置进位标志。(假设我们查看签名的结果;否则根据文档将不会发生进位)。

ARM文档是否错误?我有什么误会

fuz*_*fuz 5

ARM使用反向进位标志进行借位(即减法)。这就是为什么在没有借入时设置进位并在有借出时设置进位。这个设计决定使ALU的构建稍微简单一些,这就是某些CPU这样做的原因。