键盘缓冲区的操作

饶鹏 2005-09-26 05:48:36
我本来打算用BIOS中断10h读键盘缓冲区,用读到的按键控制程序走向,可无论我读多少次,读到的总是第一次按下的键。怎样才能依次读取缓冲区内的数据呢?


getc:   MOV   AH, 1
     INT   16H

     MOV   DL, AL
     MOV   AH, 2
     INT   21H

     SUB   AX, AX

     JMP   getc

按照这个运行,总只能显示第一次按下的键。我想做到程序依次显示我按下的每个键,请各位帮帮忙。
...全文
98 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
饶鹏 2005-09-26
  • 打赏
  • 举报
回复
弄明白了,原来是在缓冲区没有按键储存时才等待用户输入,只要输入速度够快,就只用等待一次而已。多谢了。
饶鹏 2005-09-26
  • 打赏
  • 举报
回复
多谢,终于成功了。
但是,为什么单独用
mov ah,0
int 16h
程序会暂停并等待用户输入,而这里就不暂停了呢?请再讲解一下,在下感激不尽。
csdsjkk 2005-09-26
  • 打赏
  • 举报
回复
getc:   MOV   AH, 1
     INT   16H
jz 无按键
mov ah,0
int 16h

     MOV   DL, AL
     MOV   AH, 2
     INT   21H

     SUB   AX, AX

     JMP   getc
饶鹏 2005-09-26
  • 打赏
  • 举报
回复
刚才试了下直接从60H端口读取当前按键扫描码,这样做确实不用等待用户输入了,但好像没有缓冲功能。比如我依次键入"asdf",有时只显示出"adf"三个字符(程序循环一次的时间有点长)。而我想做的是让程序依次显示我按的所有键,看来用这个方法也不行啊。
饶鹏 2005-09-26
  • 打赏
  • 举报
回复
抱歉,首帖的键盘中断16H错写成10H了。
饶鹏 2005-09-26
  • 打赏
  • 举报
回复
这样当然可以,但就无法直接对缓冲区操作了吧?就是因为从键盘读字符必须等待用户输入,我才直接读键盘缓冲区的。
如果有其他不用等待用户输入的方法也可以,多谢了。
csdsjkk 2005-09-26
  • 打赏
  • 举报
回复
MOV   AH,0
     INT   16H

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧