![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-18 12:43 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,270 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 通过大家努力,批处理可告别choice |
| 可打印版本 16,561 / 45 |
| 第1楼 wangff | 发表于 2008-12-09 11:37 |
| 初级用户 发帖 54 积分 134 | |
|
通过大家努力,批处理可告别choice 改进版在26楼:
大家共同改进! [ Last edited by wangff on 2008-12-11 at 10:34 ] |
|
| 第2楼 wangff | 发表于 2008-12-09 16:09 |
| 初级用户 发帖 54 积分 134 | |
|
[ Last edited by wangff on 2008-12-10 at 21:35 ] |
|
| 第3楼 s11ss | 发表于 2008-12-09 19:33 |
| 银牌会员 发帖 566 积分 2,098 | |
|
wangff兄可不可以讲解下int 16的1号功能是怎么用的?
|
|
| 第4楼 wangff | 发表于 2008-12-09 20:58 |
| 初级用户 发帖 54 积分 134 | |
|
键盘服务(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 |
|
| 第5楼 s11ss | 发表于 2008-12-09 21:04 |
| 银牌会员 发帖 566 积分 2,098 | |
|
不好意思,这不算讲解吧?至少给一两个例子说明下嘛:)
|
|
| 第6楼 wangff | 发表于 2008-12-09 21:28 |
| 初级用户 发帖 54 积分 134 | |
|
(2)、功能01H
功能描述:读取键盘状态 入口参数:AH=01H——检查普通键盘 出口参数:ZF=1——无字符输入,否则,AH=键盘的扫描码,AL=ASCII码。 不知说清楚否?打字很慢,请谅解. |
|
| 第7楼 s11ss | 发表于 2008-12-09 22:03 |
| 银牌会员 发帖 566 积分 2,098 | |
|
mov ah,0
int 16 上面两句不就是读输入么,还要1号功能干什么? |
|
| 第8楼 wangff | 发表于 2008-12-09 22:15 |
| 初级用户 发帖 54 积分 134 | |
Originally posted by s11ss at 2008-12-9 22:03: ah=0: 是等待输入 ah=1: 只检测,不读取(还在键盘缓冲中),如有输入还必须用ah=0读出 [ Last edited by wangff on 2008-12-9 at 22:17 ] |
|
| 第9楼 s11ss | 发表于 2008-12-09 22:20 |
| 银牌会员 发帖 566 积分 2,098 | |
Originally posted by wangff at 2008-12-9 10:15 PM: 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 ] |
|
| 第10楼 wangff | 发表于 2008-12-09 22:36 |
| 初级用户 发帖 54 积分 134 | |
|
2楼的例子:
inc i ::有参数(任意)等待输入一个字符,通过errorlevel返回 就只用了ah=0 而: inc ::无参数检测是否有按键 无:errorlevel=0 有errorlevel=键值 可用干运行中动态检测按键 则必须用到 ah=1 |
|
| 第11楼 s11ss | 发表于 2008-12-09 22:48 |
| 银牌会员 发帖 566 积分 2,098 | |
Originally posted by wangff at 2008-12-9 10:36 PM: 无按键是直接回车的情况么?如果只用0号的话,al是0d啊 |
|
| 第12楼 wangff | 发表于 2008-12-09 23:02 |
| 初级用户 发帖 54 积分 134 | |
|
这个例子就可说明,只用ah=0做不到这种效果 [ Last edited by wangff on 2008-12-9 at 23:06 ] |
|
| 第13楼 s11ss | 发表于 2008-12-09 23:30 |
| 银牌会员 发帖 566 积分 2,098 | |
|
我慢慢体会吧,有劳了,wangff兄
|
|
| 第14楼 s11ss | 发表于 2008-12-09 23:59 |
| 银牌会员 发帖 566 积分 2,098 | |
|
二楼的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,何故?
|
|
| 第15楼 wangff | 发表于 2008-12-10 08:22 |
| 初级用户 发帖 54 积分 134 | |
Originally posted by s11ss at 2008-12-9 23:59: 谢谢s11ss的细心,是从debug考下多余的,被长度16h约束没存到inc.com中不影响使用,已修改. |
|
| 1 2 3 4 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |