32ビットおよび64ビットのアセンブリ言語ファイルをgasからMASM形式に変換していますが、コード内で完全に問題があると思われる命令に遭遇しました。つまり、命令が比較を実行するためにメモリから8、16、32、または64ビットをフェッチするかどうかにかかわらず、アセンブラがオペランドのサイズを知る方法がわかりません。手順は次のとおりです。
- cmp $ 0、8(%rsp)
命令が次のいずれかであった場合、アセンブラは、レジスタに基づいてフェッチおよび比較するメモリオペランドのサイズを把握できたはずです。
- cmp%rax、8(%rsp)
- cmp%eax、8(%rsp)
- cmp%ax、8(%rsp)
命令はcmpb、cmpw、cmpl、cmpqである必要があると思っていたでしょう...しかし、いいえ、私のプログラムはcmp命令だけでそれをうまく組み立てます。残念ながら、私はこのコードが何をしているのか覚えていません、そしてそれは非常に明白ではありません...したがって、これを解決するより簡単な方法は、命令が何をしているのかを知ることです。
誰か知ってる?この構文(オペランドのサイズ/タイプが指定されていない)がイミディエートオペランドでも許可される理由を誰もが理解していますか?