首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

8086 汇编 一个能控制ctrl+c 和ctrl+break 的例子,研究一天了

2013-11-19 
8086 汇编一个能控制ctrl+c 和ctrl+break 的例子,研究一天了,在线等此程序为什么运行的时候不显示字符,确

8086 汇编 一个能控制ctrl+c 和ctrl+break 的例子,研究一天了,在线等

此程序为什么运行的时候不显示字符,确实能阻止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


[解决办法]
dos 的键盘输入功能,不是通过 int16h 来实现的吧,所以在 int16h 里进行检测判断作相应的处理不会有预期效果;就如你上面的 int1bh 来处理 Ctrl+Break 似的,dos 是用 int23h 来处理 Ctrl_C 的。

热点排行