2012-09-17 4 views
7

어셈블리 언어에는 하드웨어 인터럽트가 아닌 DOS 인터럽트 INT 21h가 있습니다.어셈블리에서 사용자 정의 인터럽트를 만들 수 있습니까?

내 인터럽트를 작성하여 호출 할 수 있는지 궁금합니다.

가능하면 링크 또는 방법을 제안하십시오.

+0

관련 : http://stackoverflow.com/questions/3392831/what-happens-in-an-interrupt-service 여기

인터럽트 22H에 대한 핸들러를 설정하는 방법의 예를 간다 -routine –

답변

16

네, 고유 한 인터럽트 처리기를 만들고 원할 때마다 호출 할 수 있습니다. 자신의 인터럽트 처리기를 가리 키도록 인터럽트 벡터 (주소 0000 : 0000에서 시작)를 설정해야합니다.

각 처리기에 대한 포인터는 4 바이트 (오프셋 및 세그먼트)를 소비하므로 예를 들어 INT 22h에 대한 인터럽트 처리기를 설정하려면 위치 0000 : 0088h의 인터럽트 벡터를 처리기를 가리 키도록 업데이트해야합니다.

Ralph Brown's interrupt list을 검사하여 사용하지 않은 인터럽트 번호 (하드웨어 인터럽트에서 사용하지 않는 하나 이상)를 확인하십시오.

INITIALIZE: 
     XOR AX,AX 
     MOV ES,AX 
     CLI ; Disable interrupts, might not be needed if seting up a software-only interrupt 
     MOV WORD PTR ES:[136], OFFSET INT22 ; setups offset of handler 22h 
     MOV WORD PTR ES:[138], CS   ; Here I'm assuming segment of handler is current CS 
     STI ; Reenable interrupts 
     ; End of setup 


INT22 PROC FAR 
     ; Here goes the body of your handler 
     IRET 
INT22 ENDP 
+0

나는 그것을 얻는다. 그러나 INT 21H에있는 파일 쓰기 기능과 같은 것은 가능한 프로그래밍이다. 게다가 인터럽트를 설정하는 예를 들려 줄 수 있습니까? 대단한 도움이 될 것입니다. –

+0

@TotalAnimeImmersion : 예, 원하는대로 인터럽트 처리기에서 처리 할 수 ​​있습니다. 핸들러 설정 예제가 추가되었습니다. – gusbro

+0

고마워요. 정말 도움이되었습니다. –

관련 문제