在ARM文档这里中,它说:
结转发生: ..。如果减法的结果是正数或零.
我从这个答案是这样的了解到,当存在无符号下流时,进位标志被设置为减法(即被减去的数字(减法)大于从(分钟)减去的数字)。
因此,请考虑下面的示例:
r1 = 5
r2 = 10
CMP r1, r2比较(CMP)执行减法如前所述,然后设置适当的标志。在这种情况下,r1-r2 = 5-10 = -5。由于我们这里有未签名的下流(5 < 10),我们期望设置进位标志。但是根据ARM文档,结果(-5)不是正数或零,所以不应该设置进位标志。(假设我们查看签名的结果;否则,根据文档,进位将永远不会发生)。
手臂文件有问题吗?我有什么误会?
发布于 2018-10-30 13:39:35
ARM使用倒置的进位标志进行借用(即减法)。这就是为什么在没有借入的情况下就会设置进位,而在没有借入的时候就会清空。这个设计决定使得构建一个ALU稍微简单一些,这就是为什么一些CPU会这样做的原因。
发布于 2018-10-30 18:08:14
我们不需要全部32位来显示减法所发生的事情
5-3
从小学开始,我们知道5 -3 =5 +(-3),这是逻辑上的做法,两个补语的一个特点是到-3,你倒转并加一个所以。
5-3
1
0101
+ 1100
=========完成它
11011
0101
+ 1100
=========
0010因此,一般说来(不特定于处理器)5-3= 2。错误位的进位和执行都是1,因此符号溢出不会被设置为1。但是一些体系结构以及倒置第二个操作数和进位(到lsbit)也反转执行称为借。有些人没有。
当您查看大于或小于进位的定义时,有些人会将其记录下来。
5-4
11111
0101
+ 1011
=========
00015-5
11111
0101
+ 1010
=========
00005-6
00011
0101
+ 1001
=========
11115-7
00011
0101
+ 1000
=========
1110这表明,当操作数b等于操作数a时,当b小于a时,当b等于或大于a时,它就会切换。因此,如果体系结构保持不变,则可以将进位位用于无符号大于或小于(但不等于)的一种情况下,其中一种情况大于或等于由该标志定义,而哪个方向取决于体系结构(如果它将执行反转为借用)。另一个方向,您可以翻转操作数,使用一个位,或者使用N和C来确定大于或等于的东西。
与其他一些不同的是,arm文档向您展示了每个条件符的标志是什么,并且知道上面的标志,或者能够在一个简单的测试中重复它,您可以知道它们是倒转还是不倒。指令sbb是借用而不是sbc减去其中的进位,但它本身并不意味着指令集是如何解释位的。
发布于 2022-04-01 03:14:58
我对以下问题也有同样的困惑:
想:5 - 3 = 2 -> positive result ->应该C=1?
终于找到了ARM官方有用的文档:携带旗
在A 32/T32代码中,C以下列方式之一设置:
要知道:
5 - 10 = -5 -> produced a borrow = unsigned underflow = negative result -> for C=0 C=1因此,符合:
5 - 3 = 2 -> positive result -> for C=1https://stackoverflow.com/questions/53065579
复制相似问题