符号なし 2 バイトをメモリから 32 ビット レジスタに移動したい場合、MOV
命令を使用してモード スイッチなしで実行できますか?
MOVSE
とのMOVZE
命令でそれを行うことができることに気付きました。たとえばMOVSE
、エンコーディングを使用すると、 0F B7
16 ビットが 32 ビット レジスタに移動します。ただし、これは 3 サイクルの命令です。
あるいは、4 バイトをレジスタに移動してから、どういうわけかそのうちの 2 つだけを CMP することもできると思います。
32 ビット x86 で 16 ビット データを取得して比較するための最速の戦略は何ですか? 私は主に 32 ビット操作を行っているため、16 ビット モードに切り替えてそこにとどまることはできないことに注意してください。
初心者への参考情報: ここでの問題は、32 ビット Intel x86 プロセッサがMOV
、モードに応じて 8 ビット データと 16 ビットまたは 32 ビット データを処理できることです。このモードは「D ビット」設定と呼ばれます。デフォルト以外のモードを使用するには、特別なプレフィックス 0x66 および 0x67 を使用できます。たとえば、32 ビット モードで命令の前に 0x66 を付けると、オペランドが 16 ビットとして扱われます。唯一の問題は、これを行うとパフォーマンスが大幅に低下することです。