2

私は PIC32 MCU (MIPS M4K コア) を使用しています。MIPS で割り込みがどのように機能するかを理解しようとしています。「See MIPS Run」本、公式の MIPS リファレンス、および Google で武装しています。誰も私が次のことを理解するのを手伝ってくれません:

次のように割り込みを宣言しました。

void __ISR(_CORE_TIMER_VECTOR) my_int_handler(void)

逆アセンブルを見ると、それRDPGPR SP, SPが ISR プロローグ (実際には最初の命令) で呼び出されていることがわかります。バランシングWRPGPR SR, SR命令が ISR エピローグで呼び出されます (以前に保存されたStatusレジスタを CP0 に書き込み、 を呼び出す前ERET)。これらの命令の目的は、以前のシャドー レジスタ セットから読み取って保存することであることがわかります。そのため、シャドー レジスタ セットからRDPGPR SP, SP読み取って書き戻すのですが、その理由がわかりません。この ISR はシャドウ レジスタ セットを使用しないことを意図しており、実際に逆アセンブルすると、コンテキストがスタックに保存されていることがわかります。しかし、何らかの理由で、シャドウから読み取られ、シャドウに書き込まれます。どうしてこれなの?$spWRPGPR SR, SR$sp$sp

また、関連する質問: MIPS アセンブリ言語に関する本当に包括的なリソース (書籍など) はありますか? 「See MIPS Run」はとても良さそうです。MIPS アーキテクチャを掘り下げるための出発点としては最適ですが、いくつかのトピックは十分にカバーされていません。

  • EIC (外部割り込みコントローラー) モードに関する情報はほとんどありません: EIC モードではの代わりにあるCauseことを示すレジスタ付きの図がありますが、それがどのように機能するかについては何もありません (たとえば、. 何を意味するのか説明すらありません (「Requested Interrupt Priority Level」、まあ、Google が助けてくれました). EIC が実装に依存していることは理解していますが、今述べたことは一般的なものです。RIPLIP7-2Cause->RIPLStatus->IPLRIPL
  • アセンブリ言語は十分にカバーされていません: たとえば、マクロ ( .macro.endmディレクティブ) については何も、既存のコードで見たいくつかのアセンブラ ディレクティブについては何も見つかりませんでした (たとえば、.set mips32r2など)。
  • ISR でのrdpgpr/の使用については何も見つかりません。これらの命令 (および一般的なシャドウ レジスタ セット) について非常に簡単に説明しています。wrpgpr

公式の MIPS リファレンスも、これらのトピックではあまり役に立ちません。考えられるすべてのアセンブリ ディレクティブなどを網羅した本当に優れた本はありますか?

4

1 に答える 1