2012-03-15 11 views
-1

Windows XP、gccを使用しています。インラインアセンブリを使用してC配列を効率的に参照する

私はいくつかのインラインアセンブリコードを持つC++プロジェクトを持っています。 アセンブリコードはC配列を参照する必要があります。 私はインラインアセンブリを使用しています。配列へのポインタをレジスタの1つに渡さなければなりません。残念ながら、これは私にいくつかの複雑な計算に必要なレジスタを奪ってしまいます。

レジスタを失うか、ポインタをスタックにプッシュしなくても、C配列を参照するインラインアセンブリ方法があるかどうかを知りたいと思います。私はスタックを使用できない理由は、十分なレジスタがないので他の値を格納するスタックに頼っているからです。

+3

あなたが作業しているプラ​​ットフォームを指定するには、質問を編集する必要があります。 –

+0

プラットフォーム情報を追加しました。 – L123

答えて

0

通常、esiまたはediレジスタはそのような情報を格納するため、計算にはまったく関係しないレジスタを使用します。 (あなたがx86で作業していると仮定)

+0

既にesiとediレジスタを使用しています。 – L123

1

アセンブリコードで「複雑な計算」を行っていますか?間違いのように聞こえる。通常、インラインアセンブリコードを記述する唯一の理由は、コンパイラ組み込み関数でサポートされていないマシン命令を使用する必要がある場合です。

あなたはどのコンパイラを使用しているかは言いませんでした。 GCCのasm()文は非常に強力です。通常は、ローカル変数またはグローバル変数を名前で参照するasm文を記述し、コンパイラにそのレジスタを選択させることができます。

+0

私はレジスタに足りない理由は、値が大きすぎて32ビットレジスタに収まらないために複数のレジスタにまたがっているためです。ドメインは暗号化されています。 – L123

関連する問題