6.13. システムモード

ARM アーキテクチャでは、15 本の汎用レジスタ、プログラムカウンタ、および CPSR を使用するユーザモードを定義しています。このモードの他にもいくつかの特権プロセッサモードがあり、それぞれの特権モードで SPSR と、15 本のユーザモード汎用レジスタの一部に置き換わるレジスタを使用します。

Note

このセクションの内容は、ARMv4、ARMv4T、およびそれ以降のアーキテクチャを実装するプロセッサのみに適用されます。

プロセッサ例外が発生すると、現在のプログラムカウンタがその例外モードのリンクレジスタにコピーされ、CPSR がその例外モードの SPSR にコピーされます。これにより CPSR が例外に応じて変更され、プログラムカウンタには例外ハンドラを起動するための、例外によって決まるアドレスがセットされます。

ARM サブルーチン呼び出し命令(BL)が、プログラムカウンタの変更前に復帰アドレスを r14 にコピーするため、このサブルーチンの復帰命令は r14 を pc に移動します(MOV pc,lr)。

これらの動作により、例外を処理する ARM モードでサブルーチンが呼び出される場合に、サブルーチン復帰アドレスが例外復帰アドレスで上書きされる結果、同じタイプの別の例外は発生しません。

以前のバージョンの ARM アーキテクチャでは、この問題は例外コード内にサブルーチンコールを含めないように注意するか、特権モードからユーザモードに変更することによって解決されていました。最初の解決方法は制約があまりにも大きく、また 2 番目の方法ではタスクを正しく実行するために必要な特権アクセスを割り当てられません。

ARMv4 以上では、この問題を解決するためにシステムモードと呼ばれるプロセッサモードが追加されています。システムモードは、ユーザモードレジスタを共有する特権プロセッサモードです。特権モードのタスクはこのモードで実行することが可能であり、例外によるリンクレジスタの上書きを防ぐことができます。

Note

例外からシステムモードに入ることはできません。例外ハンドラはシステムモードに入るときに CPSR を変更します。このサンプルについては、リエントラント割り込みハンドラを参照して下さい。

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0203GJ
Non-Confidential