web-dev-qa-db-ja.com

ARMアセンブリとx86アセンブリの違い

これから、Windows Mobile 5 iPAQ用に開発するために、ARM Assemblyを学習しますが、いくつか質問があります。

  • ARMアセンブリとx86アセンブリの主な違いは何ですか?
    • 割り込み(新しいタイプ)に違いはありますか?
      • それらはどれですか、そしてそれらの意味は何ですか?
    • コンパイルするのに最適なアセンブラとそれをどこで入手するか?
  • 良いリソースはどこにありますか?
28
Nathan Campos

主な違い:

  • 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に関するいくつかの質問がありました。それらを確認すると、開始するのに適した場所がたくさんあります。

51
Michael Burr

また、ARMは、チップを生成するのではなく、IPのライセンスを取得します。ライセンシーは、さまざまな方法でARMコアマイクロプロセッサを構成できます。最も重要なのは、問題は、ARMコア自体がIRQとFIRQの2つの割り込みのみを定義することです。ほとんどの場合、ベンダー固有の割り込みコントローラーがあるため、デバイスで使用されているマイクロプロセッサーを正確に知る必要があります。割り込みの処理方法を知る必要があります。iPAQモデルでは、Intel StongARMおよびXScaleプロセッサがさまざまに使用されています。そのレベルで開発する場合は、特定の部分のユーザーリファレンスマニュアルをダウンロードする必要があります。

とはいえ、割り込みサービスとデバイスドライバーはOSによって提供されるため、このような低レベルの詳細について心配する必要はおそらくありません。実際、開発言語としてのアセンブラーの選択については疑問があります。 ARM(コンパイラはコードパフォーマンスの点でほぼ確実にパフォーマンスを向上させます)で、CまたはC++ではなくアセンブラを選択する理由はほとんどありません。さらにWindowsMo​​bileでは、最も生産性の高いアプリケーションレベルの言語です。 C#である可能性があります。

11
Clifford