ARM動作モードは、機能によって7つに分類されます。
User Mode:ユーザーモード。オペレーティングシステムのタスクは一般的にこのモードで実行されます。User ModeはARMの非特権モードであり、CPUがこのモードにある場合、多くの命令が実行できないため、オペレーティングシステムのリソースが保護されることを示しています。
System Mode:V 4およびそれ以上のバージョンで導入された特権モデルです。
IRQ Mode:割り込みモード。このモードでは、割り込み(ソフト割り込みを含まない)処理関数が実行されます。
FIQ Mode:高速割り込みモード。いくつかのレジスタが増えた以外はIRQと同じです。
Supervisor Mode:監視モード。このモードでは、ソフト割り込み(SWI)処理関数が実行されます。
Abort Mode:メモリ保護に関連する例外はすべてこのモードで実行されます。
Undefined Mode:無効な命令を処理する例外処理関数は、このモードで実行されます。
ARM動作モードは大きく3つに分類することもできます。
ユーザーモード:User Mode
システムモード:System Mode
例外モード:その他5つのモード
なぜ7つの機能の異なるパターンを3つに分類できるのでしょうか。
これは、CPUが割り込みまたは異常を発生して自動的に対応する異常モードに切り替わると、CPUが割り込みまたは異常を発生した原因に応じて対応する割り込みまたは異常ベクトルを実行するという点で、異常モードとユーザモードとシステムモードとは異なる点があるためです。これらのベクトルの位置はCPUによって事前に定義されており、現在2つの選択肢があります。
(1)メモリローアドレス0 x 0000000000 ~ 0 x 00000001 cにある場合をLow vectorと呼ぶ。
(2)メモリ高低の0 Xffff 0000 ~ 0 xffff 001 cにある場合をHigh vectorと呼ぶ。
一般的なオペレーティングシステムでは、これらの例外ベクトルアドレスにジャンプ命令が配置されます。Low vectorを使用するか、High vectorを使用するかは、CPU自身が決定し、ARM仕様には何の制限もありません。
プログラムは、CPUの現在の実行モードを判断するために、CPSRのMODEドメインを読み取ることができます。
ARMのさまざまなパターンをどう見るか?
この質問に答えるには、パターンによって、どのようなものが異なるかを見なければなりません。要約すると、次の2つの点が異なります。
(1)物理レジスタが異なる
(2)権限が異なる
User Modeを参照モードにすると、次のようになります。
(1)System Mode:レジスタ同様、権限が異なるだけ。
(2)その他のException Mode:レジスタが異なる、権限も異なる。
権限の観点から見ると、System Modeは他のException Mode(FIQ、IRQ、Supervisor、Abort、Undefined)と同じであり、彼らの間の違いはレジスタ側にわずかな差があるだけです。
レジスタの観点から見ると、CPSR中のMODEドメインをスライス選択に似たものと見ることができ、その値が異なると、選択されたレジスタも異なります。
命令中のレジスタは同じであるが、MODEドメインのスライス選択を経て、実際には異なる物理レジスタを指しています。
SYSTEMモードとUSERモードは、アクセス権が異なる以外はすべて同じなため、ステータスレジスタを含む16個のレジスタにオペレーティングシステムが自由にアクセスできるようにする必要があります。
では、モード切り替えはどのように行われるのでしょうか。
(1)SWIまたはReset命令を実行する。UserモードでSWI命令を実行すると、CPUはSupervisorモードに入ります。もちろん、他のモードでSWI命令を実行しても、Supervisorモードに入り、一般的なオペレーティングシステムを補完することはありません。Userモードが非特権モードであることを除いて、他のモードは特権モードに属しているからです(これはARMが2つの実行状態しかなく、DummyのX 86を望まず、4つの実行状態を定義していることを示しています)。SWIを実行するのは、一般にシステムリソースにアクセスするためであり、特権モードではすべてのシステムリソースにアクセスすることができます。SWI命令は、一般にオペレーティングシステムにAPIインタフェースを提供するために使用されます。
(2)外部割込みが発生している。外部割り込みが発生すると、CPUはIRQまたはFIQモードに入ります。具体的には、どのモードなのかは、外部の割り込み元がCPUを受け取ったPinであることを見なければなりません。
(3)CPU実行中に異常が発生した。典型的な例外は、MMU保護によるメモリアクセスの異常であり、CPUはAbortモードに切り替わります。無効なコマンドの場合は、Undefinedモードになります。
上から、CPUが自動的に入らないモードがあることを発見しました。このモードはSystemモードです。Systemモードに入るには、プログラマ自身がコマンドを作成して実装する必要があります。実際には簡単で、どの特権モードでもCPSRのMODEドメインをSystemモードに対応する数字に変更すればよいです。Systemモードに入るのは、一般的に「Systemモード」と「Userモード」のレジスタを利用するためです。そのため、一般的なオペレーティングシステムはSWIを介してSupervisorモードに入った後、簡単な処理を行った後、Systemモードに入ります。
また、どの特権モードでも、CPSRのMODEドメインを変更することで他のモードに入ることができます。ただし、修正されたCPSRはこのモードにおけるシャドウCPSRであるため、実際のCPSRではないので、一般的なやり方はシャドウCPSRを修正し、それからMOVSコマンドを実行してあるブレークポイントに復帰して新しいモードに切り替えることです。
メモリフォーマット
Armアーキテクチャは、メモリをゼロアドレスから始まるバイトの線形結合とみなします。0バイトから3バイトまで格納されたワード(32ビット)データを配置し、4バイト目から7バイト目まで2番目に格納されたワードデータを配置します。32ビットのマイクロプロセッサとして、armアーキテクチャがサポートするアドレス空間は4 GBです。
メモリフォーマット:
1、大端フォーマット:高バイトは低アドレス、低バイトは高アドレス。
2、リトルエンドフォーマット:高バイトは高アドレス、低バイトは低アドレス。
命令長:Armマイクロプロセッサの命令長は32ビットであっても、16ビット(thumb状態)であってもよいです。Armマイクロプロセッサでは、バイト(8ビット)、ハーフワード(16ビット)、ワード(32ビット)の3種類のデータ型がサポートされています。ここで、ワードは4バイトの位置合わせが必要で、ハーフワードは2バイトの位置合わせが必要です。
注:命令長とは、単純なmovという3文字の長さではなく、完全な命令の長さです。
ARMシステムのCPUには2つの動作状態があります。
1、ARM状態:プロセッサが32ビットのワードアラインメントを実行するARM命令。
2、Thumb状態:プロセッサは16ビットの、半字整列のThumb命令を実行する。
プログラムの実行中は、2つの状態の間で適切な変換を行うことができます。プロセッサの動作状態の遷移は、プロセッサの動作モードおよび対応するレジスタ内のコンテンツに影響を与えません。CPUの電源が入っている状態はARMです。
(株)iPCBはPCB&PCBAの設計、製造販売及びこれらの付随業務の電子相関事業を手掛けています。弊社の詳細はリンク:https://www.ipcb.jp/ 或いはhttps://www.ipcb.com/jp をご覧ください。