2017-08-11 12 views
3

x86アセンブリのSF(符号フラグ)フラグとOF(オーバーフローフラグ)フラグの値を比較するにはどうすればよいですか?x86アセンブリ - SFフラグとOFフラグの比較

cmp命令の後、これらのフラグがセットされますが、jl命令をエミュレートするためにこれらのフラグを比較する必要があります。

答えて

4

フラグのテストには、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, ahAH(記号)に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 
+1

私は '' setl''命令()が少ない(SF≠場合は、SETバイト)でこれを行うために、よりエレガントな方法があることに気づきました。 – user091sof

+2

'' SETL'を使う準備ができているなら、なぜ '' jl''命令を実行したいのですか? – Fifoernik

関連する問題