2017-03-14 4 views
1

私は自分自身のために小さなOSを構築しています。割り込みベクタテーブルを上書きするには、0000の物理アドレスを変更する必要があると言ったオンラインの記事を読んでください:割り込み番号* 4と0000:(割り込み番号* 4)+2。 私はそれを正確に行うコードを書きましたが、仮想マシン上で実行しようとすると何も起こりません。皆さんの知識を共有し、何が間違っているのかを教えてください。これは私のコードです:割り込みベクトルテーブルを上書きしても何も起こりません。

mov ax,0 
mov es,ax 
mov ax,cs ;; set ax to the current segment 
mov [es:01a6h], ax ;; change 0000:(interrupt number*4)+2 
mov ax,interrupt1 ;; set ax to the offset of the interrupt 
mov [es:01a4h], ax ;; change 0000:(interrupt number*4) 
int 69h 
jmp $ 

これは割り込みです:

interrupt1: MOV ah,09h mov al,'c' ;;; its function is to write down the letter c in red mov bx,0004 MOV cx,1 int 10h iret

私はNASMとOracleの仮想ボックスを使用しています。

+0

'0x69の* 4 = 0x1a4'自動的に無効にされているので、STIを使用した割り込みフラグをオンにする必要があり、割り込みの内部で割り込みを使用します。 – Jester

+0

これは私がそれを取得する前にこれがコードであることに気付きました。私は以前にそれを修正しましたが、それは助けになりませんでした。 –

+0

'org'が正しく設定されていることを確認してください。完全な[mcve]を投稿してください。 – Jester

答えて

0

どうやらあなたはそれが私の計算は

+4

これは間違いです。起動するには外部割り込みを_STI_で外部割り込みをオンにする必要があります。ソフトウェア割り込みを開始するために割り込みをオンにする必要はありません( 'int 10h 'のように)。 –

+0

さて、stiをオンにすると私の問題は解決されたので、私は気づいていません.... –

+0

質問の中には、好奇心不満があります。たとえば、マスターPICが割り込み0x68に配置されるようにPICを再マップしたのですか?私が前提としていたのは、キーボードを押すたびに文字を印刷するために 'int 10h'を使うつもりだったのでしょうか? –

関連する問題