|  | 
 
| wangff 初级用户
 
   
 
 
 
 积分 134
 发帖 54
 注册 2008-11-19
 状态 离线
 |  | 
|  2008-12-9 11:37 |  | 
|  | 
 
| wangff 初级用户
 
   
 
 
 
 积分 134
 发帖 54
 注册 2008-11-19
 状态 离线
 | 
| 『第 2 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
@echo offcall inc 2>nul
 if %errorlevel%==1 (   ::inc 不存在则创建
 >inc.src echo ecs:100 A0 5D 00 3C 20 75 09 B4 01 CD 16 B8 00 00 74 02 CD 16 B4 4C CD 21
 >>inc.src echo rcx
 >>inc.src echo 16
 >>inc.src echo w
 >>inc.src echo q
 debug inc.com < inc.src 2>nul 1>nul
 del inc.src
 )
 set/p =input:<nul
 inc i ::有参数(任意)等待输入一个字符,通过errorlevel返回
 echo %errorlevel%
 :loop
 inc   ::无参数检测是否有按键 无:errorlevel=0 有errorlevel=键值 可用干运行中动态检测按键
 echo %errorlevel%
 if not %errorlevel%==0 (
 if %errorlevel%==81 goto :eof ::q or Q exit
 if %errorlevel%==113 goto :eof
 )
 ping -n 2 127.1>nul
 goto loop
 
 
 Last edited by wangff on 2008-12-10 at 21:35 ] 
 
 
 
 |  | 
|  2008-12-9 16:09 |  | 
|  | 
 
| s11ss 银牌会员
 
      
 
 
 
 积分 2098
 发帖 566
 注册 2007-9-11
 状态 离线
 |  | 
|  2008-12-9 19:33 |  | 
|  | 
 
| wangff 初级用户
 
   
 
 
 
 积分 134
 发帖 54
 注册 2008-11-19
 状态 离线
 | 
|  『第 4 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
键盘服务(Keyboard Service——INT 16H)  作者:佚名  出处:中国自学编程网收集整理   发布日期:2007-09-27
 
 00H、10H —从键盘读入字符03H —设置重复率
 01H、11H —读取键盘状态04H —设置键盘点击
 02H, 12H —读取键盘标志05H —字符及其扫描码进栈
 (1)、功能00H和10H
 功能描述:从键盘读入字符
 入口参数:AH=00H——读键盘
 =10H——读扩展键盘,可根据0000:0496H单元的内容判断:扩展键盘是否有效
 出口参数:AH=键盘的扫描码
 AL=字符的ASCII码
 (2)、功能01H和11H
 功能描述:读取键盘状态
 入口参数:AH=01H——检查普通键盘
 =11H——检查扩展键盘
 出口参数:ZF=1——无字符输入,否则,AH=键盘的扫描码,AL=ASCII码。
 (3)、功能02H和12H
 功能描述:读取键盘标志
 入口参数:AH=02H——普通键盘的移位标志
 =12H——扩展键盘的移位标志
 出口参数:AL=键盘标志(02H和12H都有效),其各位之值为1时的含义如下: 位7—INS开状态位3—ALT键按下
 位6—CAPS LOCK开状态位2—CTRL键按下
 位5—NUM LOCK开状态位1—左SHIFT键按下
 位4—SCROLL LOCK开状态位0—右SHIFT键按下
 AH=扩展键盘的标志(12H有效),其各位之值为1时的含义如下:
 位7—SysReq键按下位3—右ALT键按下
 位6—CAPS LOCK键按下位2—右CTRL键按下
 位5—NUM LOCK键按下位1—左ALT键按下
 位4—SCROLL键按下位0—左CTRL键按下
 (4)、功能03H
 功能描述:设置重复率
 入口参数:AH=03H 对于PC/AT和PS/2:AL=05H
 BH=重复延迟
 BL=重复率
 对于PCjr:AL=00H——装入缺省的速率和延迟
 =01H——增加初始延迟
 =02H——重复频率降低一半
 =03H——增加延迟和降低一半重复频率
 =04H——关闭键盘重复功能
 出口参数:无
 (5)、功能04H
 功能描述:设置键盘点击
 入口参数:AH=04H AL=00H——关闭键盘点击功能
 =01H——打开键盘点击功能
 出口参数:无
 (6)、功能05H
 功能描述:字符及其扫描码进栈
 入口参数:AH=05H
 CH=字符的描述码
 CL=字符的ASCII码
 出口参数:CF=1——操作成功,AL=00H,否则,AL=01H
 
 
 
 | 此帖被 +7 点积分  点击查看详情 | 评分人:【 HAT 】 | 分数: +4 | 时间:2008-12-9 21:04 |  | 评分人:【 s11ss 】 | 分数: +3 | 时间:2008-12-9 21:05 | 
 | 
 
 
 
 |  | 
|  2008-12-9 20:58 |  | 
|  | 
 
| s11ss 银牌会员
 
      
 
 
 
 积分 2098
 发帖 566
 注册 2007-9-11
 状态 离线
 |  | 
|  2008-12-9 21:04 |  | 
|  | 
 
| wangff 初级用户
 
   
 
 
 
 积分 134
 发帖 54
 注册 2008-11-19
 状态 离线
 | 
|  『第 6 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
(2)、功能01H 
功能描述:读取键盘状态  
入口参数:AH=01H——检查普通键盘  
出口参数:ZF=1——无字符输入,否则,AH=键盘的扫描码,AL=ASCII码。 
 mov     ah,1     ;检测是否按键int       16h
 mov     ax,0     ;ah=0 读键,清al
 jz         ret      ;zf=1 无按键返回0
 int       16h     ;有按键,读出的ASCII在al
 
 ret:
 mov     ah,4ch   ;将al返回给 errorleve
 int       21h
 
不知说清楚否?打字很慢,请谅解.
 
 
 | 此帖被 +3 点积分  点击查看详情 | 评分人:【 s11ss 】 | 分数: +3 | 时间:2008-12-9 22:04 | 
 | 
 
 
 
 |  | 
|  2008-12-9 21:28 |  | 
|  | 
 
| s11ss 银牌会员
 
      
 
 
 
 积分 2098
 发帖 566
 注册 2007-9-11
 状态 离线
 |  | 
|  2008-12-9 22:03 |  | 
|  | 
 
| wangff 初级用户
 
   
 
 
 
 积分 134
 发帖 54
 注册 2008-11-19
 状态 离线
 | 
| 『第 8 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
Originally posted by s11ss at 2008-12-9 22:03:mov ah,0
 int 16
 
 上面两句不就是读输入么,还要1号功能干什么?
 
ah=0: 是等待输入   ah=1: 只检测,不读取(还在键盘缓冲中),如有输入还必须用ah=0读出
 
 Last edited by wangff on 2008-12-9 at 22:17 ] 
 
 
 
 |  | 
|  2008-12-9 22:15 |  | 
|  | 
 
| s11ss 银牌会员
 
      
 
 
 
 积分 2098
 发帖 566
 注册 2007-9-11
 状态 离线
 | 
| 『第 9 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
Originally posted by wangff at 2008-12-9 10:15 PM:
 
 
 ah=0: 是等待输入   ah=1: 只检测,不读取(还在键盘缓冲中),如有输入还必须用ah=0读出
 
 Last edited by wangff on 2008-12-9 at 22:17 ]
 
C:\>debug 
-a 
0B22:0100 mov ah,0 
0B22:0102 int 16 
0B22:0104 
-t
 
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000 
DS=0B22  ES=0B22  SS=0B22  CS=0B22  IP=0102   NV UP EI PL NZ NA PO NC 
0B22:0102 CD16          INT     16 
-p 
(此处输入的是a) 
AX=1E61   BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000 
DS=0B22  ES=0B22  SS=0B22  CS=0B22  IP=0104   NV UP EI PL NZ NA PO NC 
0B22:0104 381C          CMP     ,BL                            DS:0000=CD 
-
 
我还是觉得用0号就行了
 
 Last edited by s11ss on 2008-12-9 at 22:22 ] 
 
 
 
 |  | 
|  2008-12-9 22:20 |  | 
|  | 
 
| wangff 初级用户
 
   
 
 
 
 积分 134
 发帖 54
 注册 2008-11-19
 状态 离线
 | 
| 『第 10 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
2楼的例子:inc i ::有参数(任意)等待输入一个字符,通过errorlevel返回
 
 就只用了ah=0
 
 而:
 inc   ::无参数检测是否有按键 无:errorlevel=0 有errorlevel=键值 可用干运行中动态检测按键
 
 则必须用到 ah=1
 
 
 
 
 |  | 
|  2008-12-9 22:36 |  | 
|  | 
 
| s11ss 银牌会员
 
      
 
 
 
 积分 2098
 发帖 566
 注册 2007-9-11
 状态 离线
 | 
| 『第 11 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
Originally posted by wangff at 2008-12-9 10:36 PM:2楼的例子:
 inc i ::有参数(任意)等待输入一个字符,通过errorlevel返回
 
 就只用了ah=0
 
 而:
 inc   ::无参数检测是否有按键 无:errorlevel=0 有errorlevel=键值 可用干运行中动态检测按键
 
 则必须用到 ah=1
 
无按键是直接回车的情况么?如果只用0号的话,al是0d啊 
 
 
 
 |  | 
|  2008-12-9 22:48 |  | 
|  | 
 
| wangff 初级用户
 
   
 
 
 
 积分 134
 发帖 54
 注册 2008-11-19
 状态 离线
 | 
| 『第 12 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
@echo off
 :loop
 for /f "tokens=*" %%a in ('ping -n 1 127.1 ^| findstr /i "Request Reply"') do echo.%%a
 inc   ::无参数检测是否有按键 无:errorlevel=0 有errorlevel=键值 可用干运行中动态检测按键
 if not %errorlevel%==0 (
 if %errorlevel%==112 pause   ::input p or P pause
 if %errorlevel%==90  pause
 if %errorlevel%==81 goto :eof ::input q or Q exit
 if %errorlevel%==113 goto :eof
 )
 ping -n 2 127.1>nul
 goto loop
 
这个例子就可说明,只用ah=0做不到这种效果
 
 Last edited by wangff on 2008-12-9 at 23:06 ] 
 
 
 
 |  | 
|  2008-12-9 23:02 |  | 
|  | 
 
| s11ss 银牌会员
 
      
 
 
 
 积分 2098
 发帖 566
 注册 2007-9-11
 状态 离线
 |  | 
|  2008-12-9 23:30 |  | 
|  | 
 
| s11ss 银牌会员
 
      
 
 
 
 积分 2098
 发帖 566
 注册 2007-9-11
 状态 离线
 | 
| 『第 14 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
二楼的ecs:100 A0 5D 00 3C 20 75 09 B4 01 CD 16 B8 00 00 74 02 CD 16 B4 4C CD 21 CD 21 CD 21中,3次int 21,何故? 
 
 
 
 |  | 
|  2008-12-9 23:59 |  | 
|  | 
 
| wangff 初级用户
 
   
 
 
 
 积分 134
 发帖 54
 注册 2008-11-19
 状态 离线
 | 
| 『第 15 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
Originally posted by s11ss at 2008-12-9 23:59:二楼的ecs:100 A0 5D 00 3C 20 75 09 B4 01 CD 16 B8 00 00 74 02 CD 16 B4 4C CD 21 CD 21 CD 21中,3次int 21,何故?
 
谢谢s11ss的细心,是从debug考下多余的,被长度16h约束没存到inc.com中不影响使用,已修改. 
 
 
 
 |  | 
|  2008-12-10 08:22 |  |