私は自分自身のために小さな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の仮想ボックスを使用しています。
'0x69の* 4 = 0x1a4'自動的に無効にされているので、STIを使用した割り込みフラグをオンにする必要があり、割り込みの内部で割り込みを使用します。 – Jester
これは私がそれを取得する前にこれがコードであることに気付きました。私は以前にそれを修正しましたが、それは助けになりませんでした。 –
'org'が正しく設定されていることを確認してください。完全な[mcve]を投稿してください。 – Jester