2017-03-03 11 views
0

私はいくつかのアセンブリを読んでいて、論理的に不可能な/死んでいるコードがあると確信しています。ここにあります:これはいつまでも間違っていますか? x86のeflag

shr  %eax 
test  %eax, %eax 
jns  0x[something] 
[if body] 
[something] 

if-bodyが実行されることはいつでも可能ですか?私は答えがノーだと感じますが、コンパイラがこれを最適化しないでしょうか?

コード内の曖昧さを謝罪し、質問文脈を与えるために必要以上にコードを追加したくありませんでした。より多くの情報が役立つかどうか教えてください。

+0

提供されている情報を前提として、符号ビットは決して設定されません。これは、最適化が欠けているか、または図示されていないコード(例えば、他の場所からの 'test'へのジャンプ)に重要な詳細があります。 – Jester

答えて

2

他の場所からif-bodyに直接分岐しない限り、jnsで到達できない可能性があります。 shr(論理シフト右)命令は、常に0の高いビット(符号ビット)をもたらすので、eaxで始まってもtestjnsは常に同じ動作をします。彼らが到達可能なら、それらの命令はまだデッドコードではないかもしれないので、他の場所コードで検索すると何がtestに、またはjnzに、または[if body]にジャンプするかどうかを確認するために価値があるだろう、と述べた

別の方法。

+0

ありがとうございました!私はジャンプを見るでしょう。 –

関連する問題