我很难清除进位标志但是我想出了一种方法来使用减法来清除它但是我想知道是否有更好的方法可以与我分享如何使用加法设置和清除进位标志和减法。
.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并清除进位标志。
有没有人有更好的清除进位旗帜的方法?
答案 0 :(得分:1)
清除进位标志的最佳方法是使用CLC
指令;设置进位标志的最佳方法是使用STC
指令。
如果你出于某些奇怪的原因必须加减法;最差的方法(代码大小)可能sub eax,eax
清除进位标志,xor eax,eax; sub eax,1
来设置进位标志。
注意:要设置进位标志,stc; sbb eax,eax
会更糟糕,但该解决方案可能会使无意义太明显。