EAX
x86 アセンブリ言語で、レジスタの上位半分を取得する方法はありますか? AX
レジスターには既にレジスターの下半分が含まれていることは知っていますEAX
が、上半分を取得する方法はまだわかりません。
mov bx, ax
の下半分を に移動することはeax
わかっていますが、上半分をbx
に移動する方法も知りたいです。eax
bx
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
を回避できます。
bx
(の下位 16 ビットebx
)の元の値を の上位 16 ビットにシフトすることを気にしない場合はebx
、1 つの命令のみが必要です。
shld ebx,eax,16
これは変更しませんeax
。
私は次のようにします:
mov ebx,eax
shr ebx, 16
ebx に eax の上位 16 ビットが含まれるようになりました