パックされたダブルワード整数をXMMレジスタからスタックにプッシュする方法はありますか?その後、必要に応じてポップバックしますか?
理想的には、汎用レジスタ用のPUSHやPOPのようなものを探しています。インテルのマニュアルを確認しましたが、コマンドを見逃したか、コマンドがありません...
または、値を汎用レジスタに解凍してからプッシュする必要がありますか?
いいえ、x86ではそのようなasm命令はありませんが、次のようなことができます。
//Push xmm0
sub esp, 16
movdqu dqword [esp], xmm0
//Pop xmm0
movdqu xmm0, dqword [esp]
add esp, 16
編集:
上のコードサンプルは、直接プッシュ/ポップエミュレーションです。
スタックで他のローカル変数も使用している場合は、次のように、ebp
レジスタを最初に適切に設定する必要があります。
push ebp
mov ebp, esp
sub esp, LocaStackVariablesSize
//... your code
mov esp, ebp
pop ebp
ret
その場合、ダニエルズソリューションを使用することもできます!
この目的のために、別の16ビット整列スタックを使用することをお勧めします。これにより、movdquの代わりにmovdqaを使用できます。これら2つの命令の間には、実行時間にわずかな違いがあります。