标题:关于delete,home等键输入问题
只看楼主
wingfeng
Rank: 2
等 级:论坛游民
帖 子:292
专家分:10
注 册:2008-12-12
结帖率:86.67%
已结贴  问题点数:20 回复次数:15 
关于delete,home等键输入问题
程序代码:
code segment
assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax    
    
    mov ah,1    ;输入
    int 21h

    mov ah,2
    mov dl,al
    int 21h


    mov ah,1
    int 21h
    mov ah,4ch
    int 21h

code ends
end start


程序代码如上所示,当我输入g,它会输出g,但是当我输入delete,及home等特殊键的时候就出现奇怪的事了,请问是怎么回事??
搜索更多相关主题的帖子: delete home 输入 
2009-10-22 12:59
wingfeng
Rank: 2
等 级:论坛游民
帖 子:292
专家分:10
注 册:2008-12-12
得分:0 
啊,,,没有人碰到过这个情况吗??还是说这个情况很特殊啊???
2009-10-22 21:25
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:14 
没什莫特殊的,很正常啊。如果你知道它们(delete、Home、PageUp、PageDown)的扫描码的话。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-22 22:04
wingfeng
Rank: 2
等 级:论坛游民
帖 子:292
专家分:10
注 册:2008-12-12
得分:0 
貌似有点明白了,那请问它们的扫描码是多少啊?
2009-10-23 07:41
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:0 
Delete          E0 53
HOME            E0 47
Page Down       E0 51
Page Up         E0 49
Left Windows    E0 5B
PrtSc           E0 37
......................

如果你有够细心,你能发现在你输入Delete键,你的程序退出的同时屏幕回显了一个S。而S的ASCII码正是53h。其他雷同。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-23 08:46
wingfeng
Rank: 2
等 级:论坛游民
帖 子:292
专家分:10
注 册:2008-12-12
得分:0 
的确退出的时候显示了个S,但在S前还有个空格,请问这个是怎么回事?还有delete的ASCII值是多少(我被搞糊涂了)?
2009-10-23 09:04
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:0 
code segment
assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax     
     
    mov ah,1    ;输入
    int 21h
 
    mov ah,2
    mov dl,al
    or  dl,50h         ;加一句这个,你运行一下就明白了。
    int 21h
 
 
    mov ah,1
    int 21h
    mov ah,4ch
    int 21h
 
code ends
end start




[ 本帖最后由 东海一鱼 于 2009-10-23 17:45 编辑 ]

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-23 17:44
wingfeng
Rank: 2
等 级:论坛游民
帖 子:292
专家分:10
注 册:2008-12-12
得分:0 
我调试过了,但是还是没有明白什么,能不能说明白点啊???
2009-10-23 19:09
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:0 
01h功能是过滤控制码并回显,因为delete是双字节扫描码。所以过滤后变成了00h 53h,00h是不可显示字符。所以被02h功能显示为空格。

但是输入缓冲区内还存在一个53h,所以被第二个01功能捕获回显为S.

这个程序的特殊之处就在于用单步跟踪时,单步中断会影响到输入缓冲区。所以看不出产生的影响。

正因为如此,我上面加入or  dl,50h 这句就是要把原来不可见的00h空格给显示出来(P)。这样你就看明白了。        

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-23 20:55
wingfeng
Rank: 2
等 级:论坛游民
帖 子:292
专家分:10
注 册:2008-12-12
得分:0 
恩,是听的差不多明白了,那是不是这些特殊键在这种程序(我上面的程序)中的这种特殊情况需不需要管它啊? 还是说不必管它??
2009-10-24 08:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-289479-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.101031 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved