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

Assembly 使用加法和减法设置和清除进位标志,assembly,masm32,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, binN

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

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


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

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

如果你因为某种奇怪的原因必须做加法或减法;最差的方法(对于代码大小)可能是清除进位标志的
sub-eax,eax
,以及
xor-eax,eax;用于设置进位标志的子eax,1


注:要设置进位标志,
stc;sbb eax,eax
甚至不那么糟糕,但这种解决方案可能会使无意义变得太明显。

但问题是我必须使用加法和减法:/Erm,好的。我添加了使用减法的方法。