6

EAXx86 アセンブリ言語で、レジスタの上位半分を取得する方法はありますか? AXレジスターには既にレジスターの下半分が含まれていることは知っていますEAXが、上半分を取得する方法はまだわかりません。

mov bx, axの下半分を に移動することはeaxわかっていますが、上半分をbxに移動する方法も知りたいです。eaxbx

4

4 に答える 4

13

EAX と EBX の上半分を保持したい場合:

rol eax, 16
mov bx, ax
rol eax, 16

スクラッチ レジスタを使用できる場合、これはより効率的です (また、EAX を読み取る後の命令で余分なレイテンシが発生することはありません)。

mov ecx, eax
shr ecx, 16
mov  bx, cx

これらのいずれも必要ない場合は、mov ebx, eax/が明白な方法であり、部分レジスタの停止や誤った依存関係shr ebx, 16を回避できます。

于 2013-03-05T18:26:45.747 に答える
8

bx(の下位 16 ビットebx)の元の値を の上位 16 ビットにシフトすることを気にしない場合はebx、1 つの命令のみが必要です。

shld ebx,eax,16

これは変更しませんeax

于 2013-03-05T19:58:35.520 に答える
4

私は次のようにします:

mov ebx,eax
shr ebx, 16

ebx に eax の上位 16 ビットが含まれるようになりました

于 2013-03-05T18:12:34.410 に答える