在再次处理x86程序集时,我遇到了一种情况,在这种情况下,我试图了解如何解释cpu的行为。
使用cmp
命令比较两个无符号整数时,进位和零标志的状态反映了两个整数的关系。因为cmp
的行为类似于sub
命令,而没有将减法的结果写入最终寄存器,所以进位标志将成为借位标志的一部分。此外,减法只不过是求反值的加法。因此,CPU不会减去1,而是加上-1。
现在,当被减数小于减数时,cmp
期间的加法将不会导致进位,但由于需要借位,因此必须设置进位标志。因此,您可以说进位标记必须在加法之后反转才能得到正确的状态。
前一个假设适用于无符号整数的每种组合,但有一个例外:
从任何无符号整数中减去零与对其加零相同,这不会产生进位。因此,反向进位会导致设置进位标志,该标志是不正确的,因为被减数(
我用一个小的汇编程序检查了此行为,当然,CPU不会产生置位进位标志。但这只有在CPU还检查subtrahend为零(并且minuend不为零,minuend = subtrahend->设置为零标志)的情况下才有可能。
我对我的假设是正确的还是我缺少什么?