1

符号なし 2 バイトをメモリから 32 ビット レジスタに移動したい場合、MOV命令を使用してモード スイッチなしで実行できますか?

MOVSEとのMOVZE命令でそれを行うことができることに気付きました。たとえばMOVSE、エンコーディングを使用すると、 0F B716 ビットが 32 ビット レジスタに移動します。ただし、これは 3 サイクルの命令です。

あるいは、4 バイトをレジスタに移動してから、どういうわけかそのうちの 2 つだけを CMP することもできると思います。

32 ビット x86 で 16 ビット データを取得して比較するための最速の戦略は何ですか? 私は主に 32 ビット操作を行っているため、16 ビット モードに切り替えてそこにとどまることはできないことに注意してください。


初心者への参考情報: ここでの問題は、32 ビット Intel x86 プロセッサがMOV、モードに応じて 8 ビット データと 16 ビットまたは 32 ビット データを処理できることです。このモードは「D ビット」設定と呼ばれます。デフォルト以外のモードを使用するには、特別なプレフィックス 0x66 および 0x67 を使用できます。たとえば、32 ビット モードで命令の前に 0x66 を付けると、オペランドが 16 ビットとして扱われます。唯一の問題は、これを行うとパフォーマンスが大幅に低下することです。

4

2 に答える 2

-1

32 ビット モードに固執し、16 ビット命令を使用する

mov eax, 0         ; clear the register
mov ax, 10-binary  ; do 16 bit stuff

あるいは、4バイトをレジスタに移動してから、そのうちの2つだけをCMPすることもできると思います

mov eax, xxxx ; 32 bit num loaded
mov ebx, xxxx
cmp ax, bx    ; 16 bit cmp performed in 32 bit mode
于 2013-04-30T01:11:33.977 に答える