2012-04-15 17 views
12

パックドダブルワード整数をXMMレジスタからスタックにプッシュする方法はありますか?後で必要になったときにポップバックしますか?
XMMレジスタをスタックにプッシュ

理想的には私は汎用レジスタのPUSHまたはPOPのようなものを探しています、私はインテルのマニュアルを確認しているが、私はどちらかのコマンドを逃した、または1つがありません...

それとも私がする必要があります値を汎用レジスタに展開してから押しますか?

答えて

20

はありません、x86の下には、このようなASMの指示がないが、あなたのような何かを行うことができます。

//Push xmm0 
sub  esp, 16 
movdqu dqword [esp], xmm0 

//Pop xmm0 
movdqu xmm0, dqword [esp] 
add  esp, 16 

EDIT:

アッパーのコードサンプルは、ダイレクトプッシュ/ポップ・エミュレーションです。

あなたは ebpレジスタは次のように、適切に設定された第1でなければならないよりも、スタック上の他のローカル変数を使用している場合は

あなたもダニエル・ソリューションを使用することができ、その場合には
push ebp 
mov ebp, esp 
sub esp, LocaStackVariablesSize 
//... your code 
mov esp, ebp 
pop ebp 
ret 

+0

あなたの答えをありがとう。それに基づいて(あなたの解決策は正確には機能しませんでした)、私は働いていました(私の質問を参照)。まだ回答としてマークされています... –

+0

@Daniel Gruszczyk:はい、ebpも使用できますが、ebpレジスタが正しく設定されていることを確認してください。 ebpが正しく設定されていない場合は、他のpushまたはcallディレクティブがスタック上のデータを上書きできることを覚えておいてください。 –

+2

あなたは最終的にはこの問題を見る将来のユーザーを助けるために、答えを編集する価値があります。 –

関連する問題