为了理解为什么你可能需要记住当前具有32位和64位值的“x86”处理器,它们开始成为更受限制的8位机器,回溯到英特尔8008处理器。 1973年,我还记得(唉)!)。
在那个世界上,寄存器是宝贵的和小的。你需要增加/减少用于各种目的,最常见的是循环控制。许多循环涉及到“多精度算术”(例如,16位或更多!)通过inc/dec设置Z位,可以使用它们很好地控制循环;通过坚持循环控制指令不改变进位位,进位在整个循环迭代中被保留,并且可以实现多精度运算而无需编写大量代码来记住进位状态。
这工作得很好,一旦你习惯了丑陋的指令集。
在更大的字大小的更现代的机器上,你不需要这么多,所以INC和DEC可以在语义上等同于ADD ...,1等等。实际上,当我需要进位设置: - }
大多数情况下,我远离INC和DEC走了,因为他们做的部分条件代码更新,这样就可以在管道中引起滑稽的摊位,和ADD/SUB没有。所以在哪里不重要(大多数地方),我使用ADD/SUB来避免摊位。我只在保持代码小的时候才使用INC/DEC,例如,适合一个或两个指令的大小足够重要的高速缓存行。这可能是毫无意义的纳米[字面上!] - 优化,但我在编码习惯上很老派。
我的解释告诉我们为什么INC/DEC设置零位。对于INC/DEC为什么设置符号(以及奇偶校验位),我没有特别的解释。