neg
命令については、これを言う
:NEG命令はx86ではどのように調整フラグ(AF)を設定しますか?
0に設定CFフラグソースオペランドが0の場合。そうでない場合は1にセットされます。結果に応じて、OF、SF、ZF、AF、およびPFフラグが設定されます。
結果によるとSF、ZF、PFの設定が意味することは明白であり、最小の負の数を無効にしようとするとOFが設定されていることがわかります。しかし、AFについてはどうですか?
neg %eax
がnot %eax
+ add $1, %eax
に置き換えられたように、AFが設定されると考えました。しかし、いいえ。実際のCPUで0x6ffffef5を否定すると、AFを設定しますが、0x9000010aに1を加えてもAFは設定されません。あなたは0
からsub
で取得したいものに同一の
私はそれを試してみたところ、うまくいくようです。 – tbodt
@tbodt:クール、私の理論をテストしてくれてありがとう。 –
*「negがIntel CPUのサブ命令と同じuopに内部的にデコードするという証拠があります」*興味深い...これは[私が最近疑問を呈した](https://stackoverflow.com/questions/44330079/why- does-intels-compiler-prefer-negadd-over-sub)はさらに驚くべきことです。 'neg'が' sub'として内部的にデコードされた場合、 'sub'を介して' neg' + 'add'に利益がもたらされる可能性はありません。おそらく私はこれをバグとして正式に報告するべきです。インテルには問題追跡ツールがありますか? –