用加法和减法设置和清除进位标志

时间:2015-03-18 03:33:22

标签: assembly masm32

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

.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并清除进位标志。

有没有人有更好的清除进位旗帜的方法?

1 个答案:

答案 0 :(得分:1)

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

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

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