나는 nasm에 tsr 프로그램을 만들었습니다. 그것은 잘 작동하지만 나는 또한 그것을 memmory에서 제거하고 복원 내가 'ESC'버튼을 누르면 모든 구부러진 interupts 원래로해야합니다. 이것은 'ESC'버튼을 누를 때 실행되는 코드의 일부입니다. TSR (Terminate-Stay-Resident) 프로그램을 제거하는 방법
uninst:
cli
xor ax, ax
mov es, ax
mov ax, [stari_int09_seg]
mov [es:09h*4+2], ax
mov dx, [stari_int09_off]
mov [es:09h*4], dx
sti
mov ah,49h
int 21h
iret
그래서 나는 원래 값으로 변경하고
mov ah,49h
내 memmory을 지워 내 INT의 09H를 복원,하지만 난 'ESC'를 누르면 내 도스 콘솔은 응답 불가가됩니다. 즉, TSR을 올바르게 제거하지 못했음을 의미합니다. 내 첫번째 질문은 내가 뭔가를 놓친거야? 실제로 적절한 답을 줄 수있는 TSR 프로그램에 대한 경험이있는 사람들이 있습니까?
아, 49h, int 21h 시퀀스의 경우 ES를 릴리즈 할 블록의 시작 세그먼트로 설정해야합니다.이 세그먼트는 아마도 CS 레지스터 (PSP = 프로그램 세그먼트 접두어) 일 것입니다. 시도하십시오 : | 푸시 CS | 팝스 | mov 아, 49h | int 21h | . 나는이 .COM 형식 TSR (대 .EXE) 가정합니다. 또한 sti를 iret 직전으로 이동해야 할 수도 있습니다. 또 다른 문제는 일부 DOS 인터럽트를 중첩 할 수 없다는 것입니다. – rcgldr
@rcgldr 내가 쓴 것은 시도했지만 성공하지 못했다. 당신이 그것을 볼 시간이 있다면 어딘가에 전체 코드를 업로드 할 수 있습니다 – Bozic
이 링크가 도움이되는지보십시오. 지침은 약간 엉망이되어 쉼표가 아닌 별도의 줄에 피연산자를 표시합니다. [tsrs] (http://www.oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_18/CH18-4.html) – rcgldr