문제

키보드 인터럽트를 인수하기 위해 인터럽트 테이블을 변경하려고합니다. 나의 최종 목표는 나의 새로운 인터럽트 루틴을 작성하고, RAM에 자신을 복사하고, 실제 인터럽트 테이블을 나에게 포인트로 만드는 것입니다.

나는 무작위를 발견했다 샘플 코드 온라인이지만 원래 인터럽트의 주소를 얻는 방법에 대한 설명이 없습니다. 그들은 단순히 자신의 자리에 변수와 기억에 빠지는 방법을 가지고 있습니다.

그래서 내 질문은 실제 모드 인터럽트 테이블을 화면을 알아 내거나 인쇄하는 방법입니다.

그리고/또는 누군가가 특정 키를 비활성화하거나 특정 키에서 경고음을 위해이 작업을 수행하는 좋은 코드 예제가있는 경우 정말 감사합니다.

감사!

도움이 되었습니까?

해결책

16 비트 실제 모드에서 인터럽트 테이블은 256 4 바이트 항목으로 주소 0에서 시작합니다. 256 개의 인터럽트 벡터 각각은 해당 테이블에서 4 바이트 주소 (세그먼트 + 오프셋)를 가져옵니다.

http://en.wikipedia.org/wiki/interrupt_descriptor_table 더 자세한 내용이 있습니다.

다른 팁

프로그램이 DOS에 따라 실행되는 경우 DOS 제공 API를 사용할 수 있습니다.

  MOV  AH,35H    ; function 35H is Get Vector
  MOV  Al,9      ; slot in IDT for keyboard interrupt
  INT  21H       ; call DOS, contents of old vector in ES:BX (save them somewhere)
   .
   .
  MOV  AH,25H    ; function 25H is Set Vector
  MOV  AL,9
  PUSH CS        ; the new vector is passed in DS:DX, so copy CS to DS
  POP  DS        :  (assuming your new handler is in the same seg as other code)
  MOV  DX,NewHandler
  INT 21H
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top