中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 请教一下这几行汇编是什么意思?
作者:
标题: 请教一下这几行汇编是什么意思? 上一主题 | 下一主题
LiveOnLove
中级用户




积分 493
发帖 161
注册 2002-10-29
来自 ZHCN
状态 离线
『楼 主』:  请教一下这几行汇编是什么意思?

实例为一个键盘测试程序

以下为请教的部分:(具体关键程序段详见后)
;INT 9
1867: PUSH AX 保存ax寄存器,这与下面的内容无关,不管。
1868: IN AL,60 读键盘扫描码
186A: PUSH AX 先保存在堆栈中
186B: IN AL,61 取控制寄存器值
186D: OR AL,80 高位置位
186F: OUT 61,AL 送到控制寄存器,表示按键认可
1871: AND AL,7F 高位清除
1873: OUT 61,AL 送到控制寄存器,表示键盘复位
1875: POP AX 从堆栈中恢复所按键的扫描码

其中有以下语句,不知与AL作比较的是代表什么意思?
        CMP AL,E0
        CMP AL,E1
        CMP AL,FA
        CMP AL,AA
        TEST AL,80
        CMP AL,F1
        CMP AL,F2
        CMP AL,9D
        CMP AL,BA
        CMP AL,C5
        CMP AL,C6
        CMP AL,B8
        CMP AL,38
        CMP AL,1D
        CMP AL,36
        CMP AL,01
        CMP AL,3B       
...
        MOV AL,20  ;复位8259控制芯片
        OUT 20,AL
        POP AX
        IRET
有以下几处调用1856的,请问放入到AL寄存器的值代表什么意思啊?
MOV AL,F3
CALL 1856

MOV AL,2A
CALL 1856

MOV AL,ED
CALL 1856

MOV AL,00
CALL 1856

MOV AL,ED
CALL 1856

MOV AL,07
CALL 1856

MOV AL,2C
CALL 1856
=====================================
下面为反汇编出的程序片段
=====================================
1135:1856 E660          OUT        60,AL   ;不明白这句??                 
1135:1858 2E            CS:                                           
1135:1859 F6060F0101    TEST        BYTE PTR [010F],01                 
1135:185E 74F8          JZ        1858                              
1135:1860 2E            CS:                                           
1135:1861 C6060F0100    MOV        BYTE PTR [010F],00                 
1135:1866 C3            RET

1135:1867 50            PUSH        AX                                 
1135:1868 E460          IN        AL,60                              
1135:186A 50            PUSH        AX                                 
1135:186B E461          IN        AL,61                              
1135:186D 0C80          OR        AL,80                              
1135:186F E661          OUT        61,AL                              
1135:1871 247F          AND        AL,7F                              
1135:1873 E661          OUT        61,AL                              
1135:1875 58            POP        AX                                 
1135:1876 3CE0          CMP        AL,E0  ;????  就是这些判断语句不知代表什么按键还是键盘的扫描码,如果是扫描码,却是E0???真的不清楚。。。      
1135:1878 7509          JNZ        1883                              
1135:187A 2E            CS:                                           
1135:187B C606080101    MOV        BYTE PTR [0108],01                 
1135:1880 E94401        JMP        19C7                              
1135:1883 3CE1          CMP        AL,E1  ;????                          
1135:1885 7509          JNZ        1890                              
1135:1887 2E            CS:                                           
1135:1888 C606090101    MOV        BYTE PTR [0109],01                 
1135:188D E93701        JMP        19C7                              
1135:1890 3CFA          CMP        AL,FA  ;????                           
1135:1892 7509          JNZ        189D                              
1135:1894 2E            CS:                                           
1135:1895 C6060F0101    MOV        BYTE PTR [010F],01                 
1135:189A E99F00        JMP        193C                              
1135:189D 3CAA          CMP        AL,AA  ;????                           
1135:189F 7522          JNZ        18C3                              
1135:18A1 2E            CS:                                           
1135:18A2 F606080101    TEST        BYTE PTR [0108],01                 
1135:18A7 7517          JNZ        18C0                              
1135:18A9 2E            CS:                                           
1135:18AA F6060D0101    TEST        BYTE PTR [010D],01                 
1135:18AF 7509          JNZ        18BA                              
1135:18B1 2E            CS:                                           
1135:18B2 C6060A0101    MOV        BYTE PTR [010A],01                 
1135:18B7 EB7D          JMP        1936                              
1135:18B9 90            NOP                                           
1135:18BA 2E            CS:                                           
1135:18BB C6060D0100    MOV        BYTE PTR [010D],00                 
1135:18C0 EB7A          JMP        193C                              
1135:18C2 90            NOP                                           
1135:18C3 A880          TEST        AL,80                              
1135:18C5 747E          JZ        1945                              
1135:18C7 3CF1          CMP        AL,F1                              
1135:18C9 747A          JZ        1945                              
1135:18CB 3CF2          CMP        AL,F2                              
1135:18CD 7476          JZ        1945                              
1135:18CF 3C9D          CMP        AL,9D                              
1135:18D1 7522          JNZ        18F5                              
1135:18D3 2E            CS:                                           
1135:18D4 F606090101    TEST        BYTE PTR [0109],01                 
1135:18D9 7561          JNZ        193C                              
1135:18DB 2E            CS:                                           
1135:18DC F606080101    TEST        BYTE PTR [0108],01                 
1135:18E1 7509          JNZ        18EC                              
1135:18E3 2E            CS:                                           
1135:18E4 80260C01FE    AND        BYTE PTR [010C],FE                 
1135:18E9 EB51          JMP        193C                              
1135:18EB 90            NOP                                           
1135:18EC 2E            CS:                                           
1135:18ED 80260C01FD    AND        BYTE PTR [010C],FD                 
1135:18F2 EB48          JMP        193C                              
1135:18F4 90            NOP                                           
1135:18F5 3CBA          CMP        AL,BA                              
1135:18F7 7509          JNZ        1902                              
1135:18F9 2E            CS:                                           
1135:18FA C606100100    MOV        BYTE PTR [0110],00                 
1135:18FF EB3B          JMP        193C                              
1135:1901 90            NOP                                           
1135:1902 3CC5          CMP        AL,C5                              
1135:1904 7517          JNZ        191D                              
1135:1906 2E            CS:                                           
1135:1907 F606090101    TEST        BYTE PTR [0109],01                 
1135:190C 2E            CS:                                           
1135:190D C606090100    MOV        BYTE PTR [0109],00                 
1135:1912 7528          JNZ        193C                              
1135:1914 2E            CS:                                           
1135:1915 C606110100    MOV        BYTE PTR [0111],00                 
1135:191A EB20          JMP        193C                              
1135:191C 90            NOP                                           
1135:191D 3CC6          CMP        AL,C6                              
1135:191F 7511          JNZ        1932                              
1135:1921 2E            CS:                                           
1135:1922 F606080101    TEST        BYTE PTR [0108],01                 
1135:1927 7513          JNZ        193C                              
1135:1929 2E            CS:                                           
1135:192A C606120100    MOV        BYTE PTR [0112],00                 
1135:192F EB0B          JMP        193C                              
1135:1931 90            NOP                                           
1135:1932 3CB8          CMP        AL,B8                              
1135:1934 7506          JNZ        193C                              
1135:1936 2E            CS:                                           
1135:1937 C6060B0100    MOV        BYTE PTR [010B],00                 
1135:193C 2E            CS:                                           
1135:193D C606080100    MOV        BYTE PTR [0108],00                 
1135:1942 E98200        JMP        19C7                              
1135:1945 2E            CS:                                           
1135:1946 A20701        MOV        [0107],AL                          
1135:1949 3C38          CMP        AL,38                              
1135:194B 7509          JNZ        1956                              
1135:194D 2E            CS:                                           
1135:194E C6060B0101    MOV        BYTE PTR [010B],01                 
1135:1953 EB42          JMP        1997                              
1135:1955 90            NOP                                           
1135:1956 3C1D          CMP        AL,1D                              
1135:1958 751F          JNZ        1979                              
1135:195A 2E            CS:                                           
1135:195B F606090101    TEST        BYTE PTR [0109],01                 
1135:1960 7565          JNZ        19C7                              
1135:1962 2E            CS:                                           
1135:1963 F606080101    TEST        BYTE PTR [0108],01                 
1135:1968 7509          JNZ        1973                              
1135:196A 2E            CS:                                           
1135:196B 800E0C0101    OR        BYTE PTR [010C],01                 
1135:1970 EB07          JMP        1979                              
1135:1972 90            NOP                                           
1135:1973 2E            CS:                                           
1135:1974 800E0C0102    OR        BYTE PTR [010C],02                 
1135:1979 3C2A          CMP        AL,2A                              
1135:197B 750E          JNZ        198B                              
1135:197D 2E            CS:                                           
1135:197E F606080101    TEST        BYTE PTR [0108],01                 
1135:1983 7542          JNZ        19C7                              
1135:1985 2E            CS:                                           
1135:1986 C6060D0101    MOV        BYTE PTR [010D],01                 
1135:198B 3C36          CMP        AL,36                              
1135:198D 7508          JNZ        1997                              
1135:198F 2E            CS:                                           
1135:1990 F606080101    TEST        BYTE PTR [0108],01                 
1135:1995 7530          JNZ        19C7                              
1135:1997 3C01          CMP        AL,01                              
1135:1999 7511          JNZ        19AC                              
1135:199B 2E            CS:                                           
1135:199C F6060B0101    TEST        BYTE PTR [010B],01                 
1135:19A1 741E          JZ        19C1                              
1135:19A3 2E            CS:                                           
1135:19A4 C606050101    MOV        BYTE PTR [0105],01                 
1135:19A9 EB1C          JMP        19C7                              
1135:19AB 90            NOP                                           
1135:19AC 3C3B          CMP        AL,3B                              
1135:19AE 7511          JNZ        19C1                              
1135:19B0 2E            CS:                                           
1135:19B1 F6060B0101    TEST        BYTE PTR [010B],01                 
1135:19B6 7409          JZ        19C1                              
1135:19B8 2E            CS:                                           
1135:19B9 C606040101    MOV        BYTE PTR [0104],01                 
1135:19BE E97BFF        JMP        193C                              
1135:19C1 2E            CS:                                           
1135:19C2 C606060101    MOV        BYTE PTR [0106],01                 
1135:19C7 B020          MOV        AL,20                              
1135:19C9 E620          OUT        20,AL                              
1135:19CB 58            POP        AX                                 
1135:19CC CF            IRET
=====================================
1135:1A2B FA            CLI
1135:1A2C B009          MOV        AL,09                              
1135:1A2E B435          MOV        AH,35                              
1135:1A30 CD21          INT        21                                 
1135:1A32 8CC0          MOV        AX,ES                              
1135:1A34 8ED8          MOV        DS,AX                              
1135:1A36 8BD3          MOV        DX,BX                              
1135:1A38 B060          MOV        AL,60                              
1135:1A3A B425          MOV        AH,25                              
1135:1A3C CD21          INT        21                                 
1135:1A3E 1F            POP        DS                                 
1135:1A3F BA6718        MOV        DX,1867                           
1135:1A42 B009          MOV        AL,09                              
1135:1A44 B425          MOV        AH,25                              
1135:1A46 CD21          INT        21                                 
1135:1A48 FB            STI                                           
1135:1A49 B0F3          MOV        AL,F3                              
1135:1A4B E808FE        CALL        1856                              
1135:1A4E B02A          MOV        AL,2A                              
1135:1A50 E803FE        CALL        1856                              
1135:1A53 2E            CS:                                           
1135:1A54 C606040100    MOV        BYTE PTR [0104],00                 
1135:1A59 2E            CS:                                           
1135:1A5A C6060A0100    MOV        BYTE PTR [010A],00                 
1135:1A5F B0ED          MOV        AL,ED  ;AL的值到底代表什么?           
1135:1A61 E8F2FD        CALL        1856                              
1135:1A64 B000          MOV        AL,00                              
1135:1A66 E8EDFD        CALL        1856
...

2005-12-21 19:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
LiveOnLove
中级用户




积分 493
发帖 161
注册 2002-10-29
来自 ZHCN
状态 离线
『第 2 楼』:  

希望知道的帮个忙啊。

2005-12-26 13:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vptdosme
初级用户





积分 97
发帖 32
注册 2005-12-3
状态 离线
『第 3 楼』:  

具体代码我就没看了
1.OUT        60,AL   ;不明白这句??
向60端口写入一个字节(存储在AL中)
2.
1135:1A5F B0ED          MOV        AL,ED  ;AL的值到底代表什么?           
1135:1A61 E8F2FD        CALL        1856   
可以用调试软件跟踪到 CALL  1856,要看该CALL怎样使用这个参数了

2005-12-29 13:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
LiveOnLove
中级用户




积分 493
发帖 161
注册 2002-10-29
来自 ZHCN
状态 离线
『第 4 楼』:  

RE:vptdosme
1:OUT 60,AL,这个端口不是放键盘扫描码的吗?难道可以直接修改它??
2:CALL在这里:
=====================================
1135:1856 E660              OUT        60,AL   ;不明白这句??                 
1135:1858 2E                  CS:                                          
1135:1859 F6060F0101    TEST        BYTE PTR [010F],01                 
1135:185E 74F8              JZ        1858                              
1135:1860 2E                  CS:                                          
1135:1861 C6060F0100    MOV        BYTE PTR [010F],00                 
1135:1866 C3                  RET

2005-12-29 16:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
LiveOnLove
中级用户




积分 493
发帖 161
注册 2002-10-29
来自 ZHCN
状态 离线
『第 5 楼』:  

只有发生INT9键盘中断时,才有可能会修改010F处的值。
详见INT9自编中断处的:
1135:1985 2E                  CS:                                          
1135:1986 C6060D0101    MOV        BYTE PTR [010D],01                 
1135:198B 3C36               CMP        AL,36

2005-12-29 16:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vptdosme
初级用户





积分 97
发帖 32
注册 2005-12-3
状态 离线
『第 6 楼』:  

好长时间没玩16位汇编了,有些都忘了。不过有一点可以肯定,DOS下程序可以直接访问端口
另外,一个键盘测试程序没有必要搞得这么复杂吧
这有我N年前写的一个例子,看看有没有用吧:
;显示键盘输入字符的ASSIC码,按ESC退出
.model tiny
.stack
.code
org 100h
bejin: jmp start
include lib.hsq
key_ASII0 db 0dh
key_ASII1 db '?','?','$'
key_statue db 'Cops Lock',13,10,'$'

start: mov ax,cs
       mov ds,ax
again: mov ah,0
       int 16h
       cmp ah,01h
       je  exit@
       mov key_ASII0,al
       lea bx,key_ASII0  
       Char_data
       lea bx,key_ASII1
       mov [bx],ah
       mov [bx].1,al
       jmp go
exit@: jmp exit
go:    mov ah,02H
       int 16h
       mov cl,6
       shr al,cl
       and al,00000001b
       cmp al,1
       jne nokey
;测试Cops Lock键是否按下
       print key_statue
nokey: print key_ASII1
       wait_Enter
       clear_screen
locate:  mov  ah,2
         mov  dh,0         ;行
         mov  dl,0
         mov  bh,0          ;页号
         int  10h           ;置光标位置
         jmp again
exit:
        mov ah,4ch
        int 21h
end bejin

[ Last edited by vptdosme on 2005-12-29 at 16:28 ]

附件 1: W.rar (2005-12-29 16:27, 312 bytes, 下载附件所需积分 1 点 ,下载次数: 9)
2005-12-29 16:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
LiveOnLove
中级用户




积分 493
发帖 161
注册 2002-10-29
来自 ZHCN
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by vptdosme at 2005-12-29 04:21 PM:
好长时间没玩16位汇编了,有些都忘了。不过有一点可以肯定,DOS下程序可以直接访问端口
另外,一个键盘测试程序没有必要搞得这么复杂吧
这有戠...

端口也有只读和读写的区别啊。据我所知,60端口是放置键盘扫描码的,怎么还能直接写呢,看来这部分,以前我是没有见过的。

至于这个测试程序吧,这个是做键盘COB邦定时,厂家提供的测试程序,不可能有什么问题的(我们都做了几十万个键盘了,包括Acer明基,罗技等键盘)。当然,因为它涉及的东东比较多,所以它全部是自己写INT9.

2005-12-31 08:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xingxing168
新手上路





积分 11
发帖 6
注册 2006-4-13
状态 离线
『第 8 楼』:  

看看int 16h的调用就应该知道了

2008-11-1 16:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhengxm
新手上路





积分 8
发帖 4
注册 2008-11-1
状态 离线
『第 9 楼』:  

底层驱动一定要结合硬件原理图看,才能明白

2008-11-1 22:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 10 楼』:  

1、键盘/键盘控制器并不是只读的,比如重启PC、复位键盘、设置键盘速率和延时、要求重发扫描码、设置LED状态、设置扫描码集、屏蔽一类键等等。
2、INT 16H得到的有ASCII码和伪扫描码,所以INT 9要对取得的数据进行分析(E0的扫描码是指小键盘按键)。
3、INT 9不仅仅要取得扫描码转换成伪扫描码和或ASCII码,而且要对一些特殊按键进行处理,比如PrtSrc、Ctrl+Break就要调用对应的中断,对于NumLock、ScrollLock、CapsLock要设置LED状态(彻底死机的话按这些键就不会改变LED状态<程序死循环不影响硬件中断>,另外还要修改BIOS通讯区的键盘缓冲区的首尾指针和数据。6楼的那个硬件中断例程考虑过于简单了,很多该做的工作都没做,存在一定的BUG。
***9楼的不要翻出古董帖好不好***

[ Last edited by netwinxp on 2008-11-2 at 07:24 ]

2008-11-2 00:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: