8086マイクロプロセッサの割り込みベクタテーブルで、任意の割り込み(たとえばINT22HまたはINT15H)の物理アドレスを計算するにはどうすればよいですか?割り込みベクタテーブル内の任意の割り込み(例えばINT22HまたはINT15H)の物理アドレスを算出割込みベクタテーブルの割込みの物理アドレスを見つける方法は?
0
A
答えて
1
...
int 15h
命令がはるか見つけ物理アドレスポインタそれはcall
する必要があります。
これは、割り込みベクトルテーブル内のオフセットであるため、リスト{0,4,8,12、...、1016,1020}から物理アドレス(別名リニアアドレス)を与えます。
各ベクトルは4バイト長であるので、それが取るすべては(*)4.mov ax,0415h ;AL=Interrupt number, AH=4 mul ah ; -> Product in AX cwd ;(*) -> Result in DX:AX=[0,1023]
によって割り込み番号を乗算され、私はDXのように表現私のすべての線形アドレスが好き:AXを。だからこそ、一見不必要な
cwd
命令を使用しました。最終的に
int 15h
が処理される物理アドレス。
これは、1MBのメモリのどこにでも置くことができます。 (には1MBを超えるメモリはありません)。
各4バイトのベクトルはオフセットワードの後にセグメントワードが続きます。順序は重要です。
線形アドレスは、セグメント値に16を掛けてオフセット値を加算して計算されます。mov ax,16 mul word ptr [0015h * 4 + 2] ;Segment in high word -> Product in DX:AX add ax, [0015h * 4] ;Offset in low word adc dx, 0 ; -> Result in DX:AX=[0,1048575]
関連する問題
- 1. 仮想アドレス空間を処理する割り込みベクタテーブルを追加するのは誰ですか?
- 2. TRAP、ソフトウェア割り込みとハードウェア割り込みの違いは?
- 3. 割り込みを処理する方法は?
- 4. ブーストスレッド - 割り込みを受け付ける方法
- 5. 割り込みフラグと割り込み保留中のビットstm32
- 6. キーボード割り込み処理のLinuxデバイスドライバエラー
- 7. マイクロコントローラでの割り込み処理
- 8. 割り込みでグローバル変数を処理する方法
- 9. 割り込みsuper.onCreate()
- 10. インラインアセンブリからLIDTを使用して割り込みベクタテーブルをロードする方法は?
- 11. AVRプログラミング、割り込み処理
- 12. STM32 HAL SPI割り込み処理
- 13. PCIe割り込み処理用Linuxカーネル
- 14. Arduinoでの割り込み
- 15. Linuxの割り込みレイテンシー
- 16. オペレーティングシステムの割り込みハンドラ
- 17. C++の割り込みサービスルーチン
- 18. オペレーティングシステムの割り込み
- 19. クラス内の割り込み
- 20. 割り込みハンドラのコンテキストスイッチ
- 21. R Sys.sleep()macの割り込み/割り込み可能な遅延の方法は?
- 22. 他の割り込みベクタ内の割り込みベクタを呼び出す
- 23. getTimeで動作する割り込み/割り込み関数の実行
- 24. ファイルを読み込み、スカラーで分割する方法
- 25. jquery割り込みJavascriptの読み込み中にjquery-1.7.1.min.js
- 26. ハイパージーガーの役割(読み込み+書き込み)
- 27. kvmのゲストが外部割り込みと外部割り込みを処理する
- 28. bashのstdinから読み込むときに割り込み信号を処理する方法
- 29. ファイルを1行ずつ読み込み、各行を分割する方法
- 30. 他の組み込みのDWTフィールドを見つけるには?
あなたは、x86のドキュメントを読んでいましたか?あなたは16ビット、32ビット、または64ビットモードですか? http://osdev.org/&https://sites.google.com/site/masumzh/articles/x86-architecture-basics/interrupts-faults-and-trapsも参照してください。しかし、あなたの質問は広すぎてトピック外です(いくつか欠けている[MCVE](https://stackoverflow.com/help/mcve)) –
私は16ビットモードです。 – user4983572
リアルモード(16ビットモード)では、割り込みはメモリ内の16進数0000:0000から開始し、それぞれ4バイトを取るため、INT 15Hは16進数0000:0054の遠方ポインタになります。 INT 21h、AH = 35Hを使用してベクトルを取得し、AH = 25Hを使用してベクトルを設定することができます。 [wiki info](https://en.wikipedia.org/wiki/MS-DOS_API#DOS_INT_21h_services)を参照してください。 – rcgldr