少なくとも一部の割り込みハンドラをアセンブリ言語で記述する理由は何ですか?オペレーティングシステムの割り込みハンドラ
3
A
答えて
1
通常、アセンブリ内に割り込みルーチンの少なくとも一部を書き込むには、にはがあります。これは、多くの場合、割り込みによってプロセッサが特定のメモリ位置にベクトル化し、そのポイントからコードを実行し始めるためです。
あなたのプロセッサは、使用している上位レベルのルーチンの呼び出し規約に従っていない可能性がありますので、それを修正してより高いレベルの割り込み処理コードを呼び出し、割込みをクリアしてシステムを通常の実行に戻すためのより多くのアセンブリコード。例えば、Intelチップでは、割り込みから戻るためにプロセッサにiret
命令を実行させる必要があります。高水準言語で標準的な方法でこれを行う方法はありません。
2
割り込みハンドラは、常に非常に低レベルの環境で実行を開始します。プログラミング言語ですが、アセンブリには常にシステムライブラリと「ランタイム」と呼ばれるものが必要です。
たとえば、アセンブリ言語外のスタックポインタレジスタを操作することは容易ではありません。
さらに、ABIも障壁です。アプリケーションバイナリインターフェイスは、特にコンテキストの保存と復元のために、割り込み処理では複雑すぎます。
関連する問題
- 1. オペレーティングシステムの割り込み
- 2. 割り込みハンドラのコンテキストスイッチ
- 3. カーネルモジュールプログラミング(割り込みハンドラ)
- 4. i2c割り込みハンドラstm32
- 5. GPIOピンlinux(arm)の割り込みハンドラ
- 6. ARM GIC Linaro GCCの割り込みハンドラ
- 7. CodeSourcery CS3割り込みハンドラのオーバーライド
- 8. 割り込みハンドラでargsを渡す
- 9. セルフ製キーボード割り込みハンドラ
- 10. トラップハンドラ、例外ハンドラ、割り込みハンドラとシステムコールとの違いは?
- 11. オペレーティングシステムの割り込みのためのタイマ
- 12. トリガーカーネル割り込みハンドラ:どのように?
- 13. linuxのアーム割り込みハンドラはどこですか?
- 14. Matlab - ハンドラを使用したprocessusの割り込み
- 15. Mspgccで割り込みハンドラ(ISR)を宣言するには?
- 16. オペレーティングシステムでは、システムコールと割り込みの違いは何ですか?
- 17. 割り込みハンドラがFIFOに書き込むことができます
- 18. TRAP、ソフトウェア割り込みとハードウェア割り込みの違いは?
- 19. 割り込みフラグと割り込み保留中のビットstm32
- 20. 割り込みsuper.onCreate()
- 21. 割り込みハンドラのカーネルバッファからユーザ空間バッファへのデータの移動
- 22. どこに計算を入れますか?割り込みハンドラまたはメインループの内部? (埋め込みリアルタイムアプリケーション)
- 23. Arduinoでの割り込み
- 24. Linuxの割り込みレイテンシー
- 25. C++の割り込みサービスルーチン
- 26. クラス内の割り込み
- 27. 単純な割り込みハンドラ:request_irqがエラーコード-22を返します
- 28. 割り込みを処理するプログラムはどこにありますか?つまり、割り込みハンドラは保存されていますか?
- 29. 他の割り込みベクタ内の割り込みベクタを呼び出す
- 30. getTimeで動作する割り込み/割り込み関数の実行
お返事ありがとうございました。私は朝から答えに苦労していた。 – user1165418