実行ファイルを逆アセンブルしているときに、cmove
命令に遭遇しました。インターネットで既に検索しましたが、条件付き移動であり、ソースと宛先が等しい場合にmov
発生するということしかわかりません。オペランドを変更しないのに、なぜそれが必要なのかまだ理解していません。その目的は何ですか?
ベストアンサー1
命令CMOVcc
はソースと宛先を比較しません。以前の比較のフラグ (またはフラグを設定するその他の操作) を使用して、移動を実行するかどうかを決定します。(インテルマニュアル)
例:と が等しい場合、これedx
は にコピーされます:ecx
eax
ebx
cmp eax, ebx
cmove ecx, edx
これは以下と同じことを行います:
cmp eax, ebx
jne skip
mov ecx, edx
skip: