2

私は腕のアーキテクチャについて学んでいます。
1. CPSR には、実行中の現在のモードを指定するために 5 ビットが割り当てられていると考えました。ここで、3 ビットで十分な約 6 ~ 7 の異なるモードしかないためです。では、なぜ同じものに 5 ビットあるのでしょうか。
2. システム/スーパーバイザー モードの違いは何ですか? OSはどのモードでコードを実行しますか?
3. また、swi コールなどを使用せずに、ユーザー モードからシステム/スーパーバイザー モードに手動で切り替えることができるかどうかを知りたいのですが、これを行うことを制限するものは何ですか?
4. スーパーバイザー モードに切り替えるとき、そのモード用に既に存在するバンク レジスタと共にユーザー モード レジスタを使用するにはどうすればよいですか?

4

1 に答える 1

3
  1. 現在のモードを可能な限り少数のビットに圧縮するのはなぜですか? おそらく設計者は、モード ビットがもっと分散されていれば、ARM の設計がよりきれいになると感じたのでしょう。それに、CPSR の予備ビットが不足しているわけではありません。

    ただし、ここにリストされている 8 つのモードすべてで、ビット 4 が 1 に設定されていることに気付くかもしれません。これは、ARM6 (および ARM7?) プロセッサが、ARM2/ARM3 コードとの互換性のために 4 つの追加の「26 ビット」モードをサポートしているためです。これらの 4 つの 26 ビット モードはビット 4 が 0 に設定されており、ARM2/ARM3 の動作をエミュレートするユーザー モード、IRQ モード、FIQ モード、およびスーパーバイザー モードのバージョンです。ARM2/ARM3 には CPSR も SPSR もありません。N、Z、C、V、I、および F フラグは PC の上位 6 ビットにあり、プロセッサ モードは PC の下位 2 ビットにあります。上記でリンクした記事には 26 ビット モードがリストされていないため、後の ARM ではサポートされていないとしか思えません。

  2. スーパーバイザー モードとシステム モードは異なります。上記のリンクされた記事のリストを参照してください。OS がどのモードを使用するかは、OS によって異なります。システムモードが登場する前の昔は、スーパーバイザーモードが使われていました。システムモードの出現がこれを変えたかどうかはわかりません。

  3. SWI を使用せずにユーザー モードからスーパーバイザー モードに切り替える方法はないと思います。これは意図的なものであり、適切な特権を持たないプロセスがアクセスできないメモリ位置にアクセスしてシステムが不安定になるのを防ぐためのセキュリティ/安定性機能です。

  4. スーパーバイザー モードからバンクされたユーザー モード レジスタを使用するのはなぜですか? スーパーバイザー モードから取得できないユーザー モード レジスタは、R13 と R14 だけです。

于 2013-03-29T12:38:18.010 に答える