首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于进位标志上ARM文档的混淆

关于进位标志上ARM文档的混淆
EN

Stack Overflow用户
提问于 2018-10-30 13:37:40
回答 3查看 6.4K关注 0票数 6

在ARM文档这里中,它说:

结转发生: ..。如果减法的结果是正数或零.

我从这个答案是这样的了解到,当存在无符号下流时,进位标志被设置为减法(即被减去的数字(减法)大于从(分钟)减去的数字)。

因此,请考虑下面的示例:

代码语言:javascript
复制
r1 = 5
r2 = 10
CMP r1, r2

比较(CMP)执行减法如前所述,然后设置适当的标志。在这种情况下,r1-r2 = 5-10 = -5。由于我们这里有未签名的下流(5 < 10),我们期望设置进位标志。但是根据ARM文档,结果(-5)不是正数或零,所以不应该设置进位标志。(假设我们查看签名的结果;否则,根据文档,进位将永远不会发生)。

手臂文件有问题吗?我有什么误会?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-30 13:39:35

ARM使用倒置的进位标志进行借用(即减法)。这就是为什么在没有借入的情况下就会设置进位,而在没有借入的时候就会清空。这个设计决定使得构建一个ALU稍微简单一些,这就是为什么一些CPU会这样做的原因。

票数 8
EN

Stack Overflow用户

发布于 2018-10-30 18:08:14

我们不需要全部32位来显示减法所发生的事情

5-3

从小学开始,我们知道5 -3 =5 +(-3),这是逻辑上的做法,两个补语的一个特点是到-3,你倒转并加一个所以。

5-3

代码语言:javascript
复制
      1
   0101
 + 1100
=========

完成它

代码语言:javascript
复制
  11011
   0101
 + 1100
=========
   0010

因此,一般说来(不特定于处理器)5-3= 2。错误位的进位和执行都是1,因此符号溢出不会被设置为1。但是一些体系结构以及倒置第二个操作数和进位(到lsbit)也反转执行称为借。有些人没有。

当您查看大于或小于进位的定义时,有些人会将其记录下来。

5-4

代码语言:javascript
复制
  11111
   0101
 + 1011
=========
   0001

5-5

代码语言:javascript
复制
  11111
   0101
 + 1010
=========
   0000

5-6

代码语言:javascript
复制
  00011
   0101
 + 1001
=========
   1111

5-7

代码语言:javascript
复制
  00011
   0101
 + 1000
=========
   1110

这表明,当操作数b等于操作数a时,当b小于a时,当b等于或大于a时,它就会切换。因此,如果体系结构保持不变,则可以将进位位用于无符号大于或小于(但不等于)的一种情况下,其中一种情况大于或等于由该标志定义,而哪个方向取决于体系结构(如果它将执行反转为借用)。另一个方向,您可以翻转操作数,使用一个位,或者使用N和C来确定大于或等于的东西。

与其他一些不同的是,arm文档向您展示了每个条件符的标志是什么,并且知道上面的标志,或者能够在一个简单的测试中重复它,您可以知道它们是倒转还是不倒。指令sbb是借用而不是sbc减去其中的进位,但它本身并不意味着指令集是如何解释位的。

票数 2
EN

Stack Overflow用户

发布于 2022-04-01 03:14:58

我对以下问题也有同样的困惑:

  • ALU状态标志
    • 如果加法的结果大于或等于232,如果减法的结果为正,或由于移动或逻辑指令中的内插桶移位器操作的结果,则为进位。

想:5 - 3 = 2 -> positive result ->应该C=1

终于找到了ARM官方有用的文档:携带旗

在A 32/T32代码中,C以下列方式之一设置:

  • 对于加法(包括比较指令CMN ),如果加法产生进位(即无符号溢出),则C设置为1,否则设置为0。
  • 对于减法,包括比较指令CMP,如果减法产生借入(即无符号底流),则C设置为0,否则则设置为1。

要知道:

  • 减法:5 - 10 = -5 -> produced a borrow = unsigned underflow = negative result -> for C=0
    • 注:而非 C=1

因此,符合:

  • 减法:5 - 3 = 2 -> positive result -> for C=1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53065579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档