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 に答える