2009-06-20 26 views
7

この命令は正確に何をしますか?特定の数値の倍数でデータを整列させようとしますが、なぜこれを行う必要があるのでしょうか?他のアセンブラには同等の命令がありますか?MIPSの 'align'命令

答えて

9

通常、パフォーマンスを向上させるためにデータを整列します。ほとんどのプロセッサでは、特定のバイト境界にアクセスしていないときにメモリアクセスに多少のペナルティがあります。他のアセンブラーの場合、これにはある種のものがよくあります。pseudo-op.alignです。ほとんどのコンパイラは、データ構造を整列します(ただし、デバッグ目的では無効にできます)。

この詳細についてはWikipedia entryを参照してください。

あなたが整列していないメモリセルにアクセスしようとすると非エミュレートMIPSシステムでもクラッシュする場合があるので注意してください(herehereを参照してください)。

+0

外部リンクの追加説明をありがとう! –

0

これは、2つのn乗にすべてを揃えます。 exampeのために、指示

その使用方法については

に変換されます。そのない命令、そのディレクティブ:

MIPS32命令は32ビット長で、常にあります。したがって、各命令は単語境界で開始する必要があります。コードの開始前に.alignディレクティブを追加すると、32ビットに整列されます。これには多くの利点があります。命令のフェッチには1つのメモリアクセスしかかからず、おそらく命令キャッシュでは有益なものになるでしょう。

+0

ダブルフロートをスタックに保管するのはどうですか? 8バイトアライメントが必要ですか? –

+0

はい、倍精度は64ビットに整列します – Tom