yu大摆 2024-08-05 10:42 采纳率: 100%
浏览 12
已结题

CMP指令产生借位C=1还是C=0?

初学者,咨询一个问题,希望有经验者能解惑一下,感谢!是这样我这两天在看《汇编语言程序设计 ——基于ARM体系结构 第4版》中在看到比较指令CMP时,没有详细介绍影响条件标志位最终的值,自己做了下,网络搜索想验证下是否正确,结果产生了一个疑问。在搜索CMP指令时,给出的答案基本是”当C标志位值为1时,表示产生了借位或进位,因为CMP没有进位,所以C=1表示产生了借位“这种说法,但是我看书时在55页描述C标志位时是这样描述的”进位标志:加法运算(包括CMN)的结果产生了进位时则C=1,否则C=0 借位标志:减法运算(包括CMP)的结果产生了借位则C=0,否则C=1“按照书中的这种说法,C=1时在CMP指令中应该是未产生借位,跟网络搜索CMP指令介绍产生了矛盾,然后我搜索”C标志位执行减法或者CMP指令后的值“时又出现了在CMP指令后C=0表示产生了借位,就是关于CMP指令后产生了借位后到底C=0还是C=1,想请教下有什么专业说法吗?

  • 写回答

1条回答 默认 最新

  • yu大摆 2024-08-05 11:46
    关注

    以下是来自于”C知道“的回答,更懵了。

    关于CMP指令与C标志位(Carry Flag)的理解可能存在一些误解。CMP指令(Compare)确实不会直接影响C标志,它是用来比较两个操作数而不参与实际的数值运算,因此不会有进位或借位发生。书中提到在CMP后C=0代表产生了借位,这是因为在执行减法时,若需要借位(即借高位来减小当前位),则会将C设为0。

    至于网络上的一些说法可能是混淆了进位与借位的概念。在一般情况下的加法运算(例如ADD)如果产生了进位,C标志才会变为1,而在CMP这种简单比较中,并不会产生进位或借位,所以无论在什么情况下,CMP指令都不会改变C标志的值。

    总结来说,在CMP指令后,C标志通常保持不变,其状态取决于之前的运算历史,而不是CMP指令本身。如果你在做实验或查阅资料时遇到不一致,建议参考书籍的原意,因为汇编语言的细节可能会因架构和具体上下文而有所不同。如果有更多疑问,可以询问特定于ARM体系结构的专业教材或开发者论坛。

    评论

报告相同问题?

问题事件

  • 系统已结题 8月13日
  • 创建了问题 8月5日