나는 작은 OS를 직접 작성하고 있습니다. 인터럽트 벡터 테이블을 오버라이드하려면 0000의 물리적 주소를 변경해야한다는 온라인 기사를 많이 읽었습니다. 인터럽트 번호 * 4와 0000 : (인터럽트 번호 * 4) +2. 정확히 코드를 작성했지만 가상 시스템에서 실행하려고하면 아무 일도 일어나지 않습니다. 너희 중 누구도 지식을 공유하고 내가 뭘 잘못 생각하는지 말해 줄 수 있니?인터럽트 벡터 테이블을 무시합니다. 8086 아무 것도 발생하지 않습니다.
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과 오라클 가상 상자이 내 코드입니다. 내 계산에 자동으로
'0x69 * 4 = 0x1a4' 사용할 수 없기 때문에 – Jester
내가 이것을 알아 차리기 전에 이것이 코드라는 것을 알았습니다. 전에 고칠 수 있었고 도움이되지 못했습니다. –
'org'가 올바르게 설정되어 있는지 확인하십시오. 전체 [mcve]를 게시하십시오. – Jester