汇编我用int 16h的1号功能检测键盘输入,用int 21h的7号功能读取数据,为什么每次读到的好像是上次输入的感觉,代码我贴出来

小小浣熊 2012-12-01 12:01:35
NEXT2:
MOV AH,1
INT 16H
JNZ NEXT1
JMP NEXT2
NEXT1: CALL CONTRO
JMP NEXT2
CONTRO PROC NEAR
MOV AH,7
INT 21H
MOV AH,0
CLC
;CMP AL,0
;JNZ RET
CMP AL,50H
JZ IS_DOWN

CMP AL,48H
JZ IS_UP

CMP AL,4BH
JZ IS_LEFT

CMP AL,4DH
JZ IS_RIGHT

CMP AL,27
JZ IS_ESC
RET
其他东西省略了
...全文
938 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
menmen_prisch 2015-05-04
  • 打赏
  • 举报
回复
用int16的0号功能,读取数据后会把读过的数据删除
tianjigezhuhn 2012-12-10
  • 打赏
  • 举报
回复
我想键盘缓冲区会一直保存原来的字符,你先用int 16h读取之后,字符仍然在,然后在用int 21h读取,读到的就是上次的。至于第一次没用可能是残留的字符无用什么的。其实我对这些和硬件过度打交道的是非常的不通啊。
tianjigezhuhn 2012-12-10
  • 打赏
  • 举报
回复
你直接用 [code=assembly] mov ah, 10h int 16h [/code] 就应该可以了啊,然后就直接检测AH中的值就能够知道你读入的是那个键,为什么还要用INT 21H呢
小小浣熊 2012-12-05
  • 打赏
  • 举报
回复
引用 4 楼 tianjigezhuhn 的回复:
在我的汇编书中对上下左右键的检测是通过对他们的扫描码来实现的,我看了下书上的关于键盘的键的扫描码和ASCII码,发现上下左右键的ASCII码都是00h,不能够用检测ASCII的方法来实现,只能够用扫描码。 上下左右键的扫描码是48h,50h,4bh,4dh。
恩用ASCII没用的,我用的也是扫描码,但是情况会出现是每次执行的是上次的按键,意思是说第一次按键什么也不执行我写一个贪吃蛇小游戏,用方向控制键控制,用中断更新屏幕
tianjigezhuhn 2012-12-03
  • 打赏
  • 举报
回复
在我的汇编书中对上下左右键的检测是通过对他们的扫描码来实现的,我看了下书上的关于键盘的键的扫描码和ASCII码,发现上下左右键的ASCII码都是00h,不能够用检测ASCII的方法来实现,只能够用扫描码。 上下左右键的扫描码是48h,50h,4bh,4dh。
小小浣熊 2012-12-01
  • 打赏
  • 举报
回复
第一次输入没反应
  • 打赏
  • 举报
回复
上次输入?那你第一次读取的是什么?
小小浣熊 2012-12-01
  • 打赏
  • 举报
回复
刚我自己又调试了下,发现是键盘里面的4个方向控制键会出现这种情况其他普通按键正常着,感觉应该是扫描码和ASCII码我自己没有写好,但是这个东西我真现在搞不清楚,谁能详细介绍下,扫描码好ASCII码在键盘输入时的区别

21,497

社区成员

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

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