mov rcx,rdx
(https://defuse.ca/online-x86-assembler.htmを使用)の出力は48 89 D1
を出力します。x86_64 - mov命令を符号化
this referenceでオペコードをチェックすると、そのバイトシーケンスが命令をどのようにエンコードするかが示されます。
しかし、そのテーブルの2行下(オペコード8B
)は、非常によく似たmov
命令ですが、オペランドの順序は反転します。
実際、同じ命令を48 8b ca
(デコンパイルによって検証)を使ってエンコードすることができます。
なぜ両方のオペコードが存在するのですか?彼らは私が解決することができた以上に異なっていますか?誰かがいつ他の人を選ぶだろうか?
メモリオペランドをソースまたはデスティネーションのいずれかにするために存在します。両方がレジスタの場合、2つのエンコーディングが得られます。どのアセンブラがアセンブラに依存しているかによって異なりますが、いくつかは指定することさえできます(例えば、 '.s'接尾辞)。 – Jester