此程序为什么运行的时候不显示字符,确实能阻止ctrl+c 和ctrl+break,如果
把
CMP AH,1
JZ PKEY1
CMP AH,11H
JZ PKEY1
注释掉,那么就显示字符,不过按了ctrl+c 之后,不退出,但是按下一个字符显示^c和退出,我不知道在mov dl,xx,mov ah,2 int 21h 之中调用了 int 16h的哪些 地方,他是否用到了16号 中断,请大牛详解,还有程序该如何改正,研究一天了,
CSEG SEGMENT
ASSUME CS:CSEG
OLD16H DD ?
OLD1BH DD ?
NEW1 PROC FAR
NEW16H:
CMP AH,0
JZ PKEY0
CMP AH,1
JZ PKEY1
CMP AH,10H
JZ PKEY0
CMP AH,11H
JZ PKEY1
JMP DWORD PTR cs:OLD16H
PKEY0: PUSH AX
PKEY01:
POP AX
PUSH AX
PUSHF
CALL DWORD PTR cs:OLD16H
PKEY011: CMP AL,03H
JZ PKEY01
CMP AX,0300H
JZ PKEY01
ADD SP,2
IRET
PKEY1: PUSH AX
PKEY11:POP AX
PUSH AX
PUSHF
CALL DWORD PTR CS:OLD16H
JZ PKEY111
CMP AL,03H
JZ PKEY112
CMP AX,0300H
JNZ PKEY0115
PKEY112:
xor ah,ah
pushf
call dword ptr cs:OLD16H
jmp PKEY11
PKEY0115: CMP AX,0300H
PKEY111:ADD SP,2
IRET
NEW1 ENDP
NEW1BH:IRET
START:PUSH CS
POP DS
MOV AX,3516H
INT 21H
MOV WORD PTR OLD16H,BX
MOV WORD PTR OLD16H+2,ES
MOV AX,351BH
INT 21H
MOV WORD PTR OLD1BH,BX
MOV WORD PTR OLD1BH+2,ES
MOV DX,OFFSET NEW16H
MOV AX,2516H
INT 21H
MOV DX,OFFSET NEW1BH
MOV AX,251BH
INT 21H
S1:MOV AH,8
INT 21H
CMP AL,1BH
JZ EXIT
MOV DL,AL
MOV AH,2
INT 21H
CMP AL,0DH
JNZ S1
MOV AL,0AH
MOV DL,AL
MOV AH,2
INT 21H
JMP S1
EXIT:LDS DX,OLD16H
MOV AX,2516H
INT 21H
LDS DX,DS:OLD1BH
MOV AX,251BH
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START