어셈블리 클래스에 대한 할당 작업 중입니다.MS-DOS에서 새로운 키보드 인터럽트를 연결하는 데 도움이 필요합니다.
이전에는 타이머 인터럽트 디스플레이를 표시하고 매시간마다 '시계'를 업데이트했습니다.
이 지식을 사용하여 키보드 인터럽트를 대체하려고합니다. 그러나 새 키보드 인터럽트 핸들러 설치를 주석 처리 할 때도 내 프로그램이 MS-DOS 작업을 방해합니다 (즉, 실행 파일을 실행할 수 없으며 'dir', 'cd'및 이와 유사한 명령 만 사용할 수 있습니다).
.model tiny
.8086
.code
org 100h
start:
jmp setup
new_key PROC
jmp cs: old_key
new_key ENDP
setup:
mov ax, cs
mov ds, ax
old_key DD 00000000h
MOV AL, 9h ;+-
MOV AH, 35h ;| Save old_key
INT 21h ;|
MOV WORD PTR [old_key],BX
MOV WORD PTR [old_key][2],ES
; cli
; PUSH CS ;| Install new_key
; POP DS ;|
; LEA DX, new_key
; MOV AL, 9h
; MOV AH, 25h
; INT 21h
cli
push ds
LDS DX,CS:[old_key] ;+-
MOV AL, 9h ;| Disinstall new_key
MOV AH, 25h ;|
INT 21h
POP DS
STI
mov ax, TSR
int CALLDOS
end start
설치가 주석 처리 된 경우에도 문제가 있으므로 제거 또는 old_key 저장에 문제가 있다고 생각합니다. 그러나 나는 무엇이 잘못되었는지 모른다. 설치 및 제거 코드가 본질적으로 유사한 타이머 인터럽트의 설치/제거 코드가 아니어야합니까?
지원을 부탁드립니다. 미리 감사드립니다.
다소 화제가되어 이전 키보드 인터럽트에 새로운 키보드 인터럽트를 연결하는 데 도움이되었습니다. 그러나 여전히 제거에 도움이되지 않습니다 : http://stackoverflow.com/questions/15119745/assembly-on-dos-tasm-creating-tsr-with-a-new-handler-on-int-21h?rq=1 – 3932695