어셈블리 언어에는 하드웨어 인터럽트가 아닌 DOS 인터럽트 INT 21h가 있습니다.어셈블리에서 사용자 정의 인터럽트를 만들 수 있습니까?
내 인터럽트를 작성하여 호출 할 수 있는지 궁금합니다.
가능하면 링크 또는 방법을 제안하십시오.
어셈블리 언어에는 하드웨어 인터럽트가 아닌 DOS 인터럽트 INT 21h가 있습니다.어셈블리에서 사용자 정의 인터럽트를 만들 수 있습니까?
내 인터럽트를 작성하여 호출 할 수 있는지 궁금합니다.
가능하면 링크 또는 방법을 제안하십시오.
네, 고유 한 인터럽트 처리기를 만들고 원할 때마다 호출 할 수 있습니다. 자신의 인터럽트 처리기를 가리 키도록 인터럽트 벡터 (주소 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
나는 그것을 얻는다. 그러나 INT 21H에있는 파일 쓰기 기능과 같은 것은 가능한 프로그래밍이다. 게다가 인터럽트를 설정하는 예를 들려 줄 수 있습니까? 대단한 도움이 될 것입니다. –
@TotalAnimeImmersion : 예, 원하는대로 인터럽트 처리기에서 처리 할 수 있습니다. 핸들러 설정 예제가 추가되었습니다. – gusbro
고마워요. 정말 도움이되었습니다. –
관련 : http://stackoverflow.com/questions/3392831/what-happens-in-an-interrupt-service 여기
인터럽트 22H에 대한 핸들러를 설정하는 방법의 예를 간다 -routine –