コンテンツの下の左側にあるhttp://infocenter.arm.com に移動して、ARMアーキテクチャを探します。そしてそのリファレンスマニュアルの下で。以前は単一のARMARM(ARMアーキテクチャリファレンスマニュアル)がありましたが、ファミリは、それをファミリに分割しなければならないところまで成長しました。
ARMARMは命令セットを表示します。彼らがARMv5マニュアルと呼んでいるのは、古いARMARMです。ARM命令(32ビット)とサム命令(16ビット)があります。命令ごとに、どのアーキテクチャがそれをサポートしているかがリストされているため、ARMv4(ARMv4、別名ARM7、一般的なARM7TDMIコアなど)でサポートされていないARMv5命令が表示される場合があります。サム命令は、ARMv4T以降でサポートされています。
そのため、新しい命令が時々追加され、バグ/制限が修正された(たとえば、ldr r0、[r0])など、慣れ親しんだコア32ビットアーム命令セットがあります。
浮動小数点ユニットは1つまたは2つのオーバーホールがあり、ほとんどのコアにはfpuがなく、fpuがあるコアは、チップベンダーがチップに組み込んだことを意味しません。fpaは古いもので、vfpは新しいもので、現在はネオンのものです。注意を払うと、これらはすべて一般的なコプロセッサー命令のカテゴリーに分類されます。ただし、すべてのエイリアスがあるコプロセッサーのバージョンを知っている/使用する必要はありません。
このjava/jazelleのものがありました/ありました、オプションとしていくつかのコアがそれを持っているかもしれない同じ話はベンダーがそれを含んだことを意味しません。
サム命令セットに対する少なくとも2セットのthumb2拡張。thumb2拡張機能の前は、thumb命令はすべて16ビットであり、ARM命令への1対1のマッピングがあり、ARMコアのみが必要であることが理にかなっています。デコーダーは、小さい命令からARM命令に変換し、それをコアにフィードします。ブランチを除くすべての命令は16ビットであり、そのパターンを見ると、2つの別々の16ビット命令として非常に簡単にデコードできます。そこで、彼らはマイクロコントローラーの提供をより小さくすることにしました。誰もがARM7TDMIを使用してチップサイズと電力を消費するのではなく、thumb2対応プロセッサーはサムのみであり、32ビットARM命令をサポートしていません。サム命令のARMコアはありません。などの新しいコアに変換されます。ARMv6-M ak Cortex-m0とCortex-m1は、thumb命令セットを取得し、いくつかの32ビット命令を追加してARMとのパフォーマンスギャップを埋めます(thumbははい、小さいですが、両方に同じコードをコンパイルした場合、ARMよりも少し遅くなります。親指を使用するための私の実験からの10〜20%多くの指示のように)。理論的には、thumb-2(ARMv7-M)は、比較できる場合と場所でARMよりも優れています。何らかの理由で、Cortex-m3が最初に登場しました。これはARMv7-Mであり、thumb命令セットに32ビットのthumb2命令が追加されています。私は最近数えましたが、ARMv6-Mは20のように追加され、ARMv7-Mは基本サム命令セットに140-150の命令が追加されました。thumb2は基本的に可変ワード長です。また、cortex-mシリーズでのみ実行されます。それを見ると、彼らがサムという名前でARM命令セットを再構築したようです。完全ではありませんが、多くのarmのような命令を取り戻します。2つではなく3つのレジスター、より高いレジスターに到達してイミディエートを使用できるなどです。これにより、ARMとthumb/thumb2の両方用にコンパイルされたasmを作成したいという欲求が生じました。そこで彼らは統一された構文を思いついた。あなたは次のような命令を書くことができます
add r0,r1
親指のために組み立てる場合、それは指示です、腕のために組み立てる場合、彼らはそれをに変換します
add r0,r0,r1
構文エラーの代わりに。少なくともgnubinutilsアセンブラー(gas)では、統一された構文を使用していることを指定する必要があります。
同様に重要な一連のドキュメントは、同じくinfocenter.arm.comにあるテクニカルリファレンスマニュアルです。各コアにはtrmがあり、実際には各コアの各revにはTRMがあります。また、L2キャッシュなどの追加コスト項目には、回転ごとに独自のTRMがあります。プログラミングの違いやエラッタの違いがあるため、チップベンダーが購入/使用したコアと、可能であればリビジョン(rev 2.0 r2p0、rev 1.0 r1p0など)を見つけることが重要です(Linuxを参照として信頼しないでください! 、それは大きな混乱です。私がさらに別の会社がコア/エラッタの違いを完全に誤解し、誤用しているのを見るたびに、それは現時点では少し災害です)。TRMに指示情報が含まれている場合や、コアがサポートしているものとサポートしていないものについてより明確な図を描く場合があります。ARM ARM ' は一般的であり、TRMが1つのコアに非常に固有である、ファミリ全体またはコアのいくつかのファミリをカバーします。ARM ARMとTRMの混乱の例は、ARM ARMを見ると、BE-32またはBE-8ビッグエンディアンモードを使用できるという印象を受ける可能性があることです。実際には、どちらか一方のARMv6と新しいのはBE-8、期間、それに慣れてください。ARMv5およびARMv4はBE-32であるか、ARMv6がビッグエンディアンと呼ばれる前のものです。腕にビッグエンディアンを使用しないことを強くお勧めします。ネイティブモードを使用すると、大量の作業と失敗を節約できます。ARM ARMで説明されているビットが、使用していたコアで機能しなかった理由を理解しようとした個人的な経験から言及します。ARM ARMとTRMの混乱の例は、ARM ARMを見ると、BE-32またはBE-8ビッグエンディアンモードを使用できるという印象を受ける可能性があることです。実際には、どちらか一方のARMv6と新しいのはBE-8、期間、それに慣れてください。ARMv5およびARMv4はBE-32であるか、ARMv6がビッグエンディアンと呼ばれる前のものです。腕にビッグエンディアンを使用しないことを強くお勧めします。ネイティブモードを使用すると、大量の作業と失敗を節約できます。ARM ARMで説明されているビットが、使用していたコアで機能しなかった理由を理解しようとした個人的な経験から言及します。ARM ARMとTRMの混乱の例は、ARM ARMを見ると、BE-32またはBE-8ビッグエンディアンモードを使用できるという印象を受ける可能性があることです。実際には、どちらか一方のARMv6と新しいのはBE-8、期間、それに慣れてください。ARMv5およびARMv4はBE-32であるか、ARMv6がビッグエンディアンと呼ばれる前のものです。腕にビッグエンディアンを使用しないことを強くお勧めします。ネイティブモードを使用すると、大量の作業と失敗を節約できます。ARM ARMで説明されているビットが、使用していたコアで機能しなかった理由を理解しようとした個人的な経験から言及します。それに慣れる。ARMv5およびARMv4はBE-32であるか、ARMv6がビッグエンディアンと呼ばれる前のものです。腕にビッグエンディアンを使用しないことを強くお勧めします。ネイティブモードを使用すると、大量の作業と失敗を節約できます。ARM ARMで説明されているビットが、使用していたコアで機能しなかった理由を理解しようとした個人的な経験から言及します。それに慣れる。ARMv5およびARMv4はBE-32であるか、ARMv6がビッグエンディアンと呼ばれる前のものです。腕にビッグエンディアンを使用しないことを強くお勧めします。ネイティブモードを使用すると、大量の作業と失敗を節約できます。ARM ARMで説明されているビットが、使用していたコアで機能しなかった理由を理解しようとした個人的な経験から言及します。
64ビットコアは開発段階のどこかにあります。それが完了し、トリガーを引いて使用する人を探しているだけでも驚かないでしょう。実際には、ARMv8ドキュメントが利用可能で、今すぐダウンロードできます。
ARMアーキテクチャの短い回答infocenter.arm.comには、さまざまな命令セットと、それらの命令セットに対する時間の経過に伴う改善/追加について説明しているすべてのドキュメントがあります。