質問: armアセンブリとx86アセンブリの違い これから、windows mobile 5 ipaq用に開発するために、arm assemblyを学習しますが、いくつか質問があります。 armアセンブリとx86アセンブリの主な違いは何ですか? 割り込み(新しいタイプ)に違いはありますか? それらはどれですか、そしてそれらの意味は何ですか? コンパイルするのに最適なアセンブラとそれをどこで入手するか? 良いリソースはどこにありますか?
回答: 主な違い: armはriscスタイルのアーキテクチャです。命令のサイズは通常です(標準のarmの場合は32ビット、thumbモードの場合は16ビットですが、thumbには2つの命令「スロット」を噛み砕く命令がいくつかあります) 少なくともarm v5アーキテクチャ(v6が何をするのかわかりません)までは、armの割り込みモデルはintelの割り込みモデルとは大きく異なります-レジスタをスタックにプッシュする代わりに、 armは、通常のセットを「シャドウ」する別のレジスタセットにスワップします。プロセッサのモードによって、表示されるレジスタファイルが決まります(すべてのレジスタが必ずしもシャドウされるわけではありません)。それはかなり複雑な配置です。新しいarmアーキテクチャ(とにかくv7)には、割り込みが発生したときにレジスタがスタックにプッシュされるintelに近い割り込みモデルがあります。 アーム命令には、intelにはない興味深い機能がいくつかあります。 命令には条件付きフラグが組み込まれているため、指定された条件フラグが現在のステータスレジスタフラグの状態と一致しない場合、各命令はnopとして実行できます(これを使用すると、でよく見られる1つまたは2つの命令の周りのジャンプをすべて回避できます。 intel assembly)。 armには、命令の一部として埋め込むことができるシフトロジックがあります。したがって、レジスタをソースオペランドとして使用する場合、それを命令の組み込み部分としてシフトできます。これは、配列のインデックス作成に役立ち、場合によっては算術演算にも役立ちます。 一方、armは、メモリからのロードとメモリへの保存を除いて、メモリを直接処理することはできません。 intel assemblyは、メモリ上で直接、より多くの操作を実行できます。armアーキテクチャバージョンは、実際のarmプロセッサバージョンに直接対応していないことに注意してください。たとえば、覚えていれば、arm7はアーキテクチャv5プロセッサです。個人的には、これは本来よりもはるかに混乱していると思います。armアーキテクチャリファレンスは、 http://www.arm.com から無料でダウンロードできます。また、良い出発点として、 さまざまなarmマイクロコントローラーに関するhitexのガイド のコピーを入手することをお勧めします。armを使い始めるためのポインタに関して、stackoverflowに関するいくつかの質問がありました。それらを確認すると、開始するのに適した場所がたくさんあります。 初心者向けの推奨リソースarmプログラマー? https://stackoverflow.com/questions/270078/resources-for-learning-arm-assembly(archived) armプロセッサから始める方法は?