3
x86アセンブリのSF(符号フラグ)フラグとOF(オーバーフローフラグ)フラグの値を比較するにはどうすればよいですか?x86アセンブリ - SFフラグとOFフラグの比較
cmp
命令の後、これらのフラグがセットされますが、jl
命令をエミュレートするためにこれらのフラグを比較する必要があります。
x86アセンブリのSF(符号フラグ)フラグとOF(オーバーフローフラグ)フラグの値を比較するにはどうすればよいですか?x86アセンブリ - SFフラグとOFフラグの比較
cmp
命令の後、これらのフラグがセットされますが、jl
命令をエミュレートするためにこれらのフラグを比較する必要があります。
フラグのテストには、Jcc
命令とSETcc
命令の2つの主要な命令があります。両方のテーブルを見ると、これらの2つのフラグをチェックするための2つの指示が与えられます。
例SETcc
命令を使用すると、次のようになります。
seto al ; Set byte to 1 if overflow (OF=1)
sets ah ; Set byte to 1 if sign (SF=1)
今EAX
は今、あなたはcmp al, ah
でAH
(記号)にAL
(オーバーフロー)を比較することができ
0101 if both flags have been set
0100 if sign has been set
0001 if overflow has been set
0000 if both flags have been cleared
進値が含まれます。 jl
命令は、cmp
の後にjne
(等しい/ゼロでない)の差異(SF≠OF)をチェックし、元のjl
と同じ効果を持ちます。
は最後にjl
をエミュレートし、全体のコードは次のとおりです。
seto al
sets ah
cmp al, ah
jne lesser
私は '' setl''命令()が少ない(SF≠場合は、SETバイト)でこれを行うために、よりエレガントな方法があることに気づきました。 – user091sof
'' SETL'を使う準備ができているなら、なぜ '' jl''命令を実行したいのですか? – Fifoernik