gpt4 book ai didi

assembly - 为什么 INC 和 DEC 指令*不*影响进位标志 (CF)?

转载 作者:行者123 更新时间:2023-12-03 13:24:01 24 4
gpt4 key购买 nike

为什么x86指令INC (增量)和 DEC (递减)不影响CF (携带标志)在 FLAGSREGISTER 中?

最佳答案

要理解为什么您可能需要记住当前具有 32 位和 64 位值的“x86”CPU 开始时是有限的 8 位机器,回到英特尔 8008。(我在 1973 年在这个世界上编码,我仍然记住(呃)它!)。

在那个世界里,寄存器既珍贵又小。您需要 INC/DEC出于各种目的,最常见的是循环控制。许多循环涉及执行“多精度算术”(例如,16 位或更多!)通过使用 INC/DEC设置零标志( Z ),您可以使用它们很好地控制循环;通过坚持循环控制指令不更改进位标志 (CF),进位在循环迭代中得以保留,您可以实现多精度运算,而无需编写大量代码来记住进位状态。

一旦你习惯了丑陋的指令集,这很有效。

在具有更大字号的更现代的机器上,您不需要太多,所以 INCDEC在语义上可能等同于 ADD ...,1 等等。这实际上是我在需要进位集时使用的:-}

大多数情况下,我远离 INCDEC现在,因为它们会更新部分条件代码,这会导致管道中出现有趣的停顿,以及 ADD/SUB别。所以在无关紧要的地方(大多数地方),我使用 ADD/SUB以避免摊位。我用 INC/DEC只有在保持代码较小的情况下才重要,例如,适合一两个指令的大小足以影响的缓存行。这可能是毫无意义的纳米 [字面意思!] 优化,但我的编码习惯非常老派。

我的解释告诉我们为什么INC/DEC设置零标志( Z )。我没有特别令人信服的解释为什么 INC/DEC设置符号(和奇偶校验标志)。

编辑 2016 年 4 月:似乎在现代 x86 上可以更好地处理停顿问题。见 INC instruction vs ADD 1: Does it matter?

关于assembly - 为什么 INC 和 DEC 指令*不*影响进位标志 (CF)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13435142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com