2

我在清除进位标志时遇到困难,但我想出了一种使用减法清除它的方法,但我想知道是否有更好的方法可以与我分享如何使用加法和减法设置和清除进位标志。

.data

    binNum1 BYTE 11111111b

    binNum2 BYTE 00000001b

.code

    main PROC

    mov al, binNum1     ; AL = 0FFh

    add al, binNum2     ; AL = 00h CF = 1

    sub al, binNum2     ; AL = FFh CF = 1

    sub al, binNum2     ; AL = FEh  CF = 0

这就是我必须设置和清除进位标志的内容。当我第一次从 AL 中减去 binNum2 时,我得到了 FFh 的原始值,但进位标志仍然设置,直到我再次从 AL 中减去 binNum2。然后它将 AL 设置为 FEh 并清除进位标志。

有没有人有更好的方法来清除进位标志?

4

1 回答 1

4

清除进位标志的最好方法是使用CLC指令;设置进位标志的最好方法是使用STC指令。

如果出于某种奇怪的原因必须进行加法或减法;最差的方法(对于代码大小)可能sub eax,eax会清除进位标志并xor eax,eax; sub eax,1设置进位标志。

注意:设置进位标志stc; sbb eax,eax会更糟糕,但该解决方案可能会使无意义太明显。

于 2015-03-18T04:58:25.950 回答