. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  《汇编语言》  P281 外中断的扫描码与字符码的问题  [待解决] 回复[ 1次 ]   点击[ 199次 ]  
cccpwx
[帖 主]   [ 发表时间:2012-01-13 09:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-01-12 13:20
有个问题: 
《汇编语言》  P281 外中断的扫描码与字符码的问题 

书上说:高位字节存扫描码,低位字节存字符码。 

从BIOS键盘缓冲区端口传入CPU的时候,是传入整个一个字给AX,还是只传低字节给al,还是舍弃其中哪一个? 
理论上说,应该是传低字节的字符码给al的。 

=============================================== 

;---------以下为新的int 9中断例程 

int9:      push ax              ; ax,bx,es分别入栈 
              push bx 
           push es 

           in al,60h            ;  通过60h端口传输al 

           pushf                ; flag 入栈 

              pushf                ; flag 再次入栈 
              pop bx               ; 第二次的flag出栈给bx 
           and bh,11111100b     ; flag寄存器里面的IF和TF位设置为0 
           push bx              ; bx的值入栈 
              popf                 ; bx入栈的值弹出给flag 
           call dword ptr ds:[0]         ; 这里的调用,相当于原中断int 9 

           cmp al,1                      ;判断键盘输入的识别码是不是ESC的扫描码1 
           jne int9ret                   ;jump to int9ret if al =/= 1 ;键盘输入不是ESC 
        
           mov ax,0b800h                  
           mov es,ax 
           inc byte ptr es:[160*12+40*2+1]  ;把显存里的控制颜色闪烁的字节的值给加1 

int9ret:   pop es 
           pop bx 
           pop ax                    ;倒序弹出 
              iret                      ;call dword ptr ds:[0] 弄出来的int 9 给中断返回 
============================================================= 
这里面的 
cmp al,1  好像确实判断的是ESC的扫描码。 

哪里理解有问题? 

多谢各位指教。 
 ==========================

ESC的ASCII字符码是10h 

为什么不是判断 
cmp al,10h
tomato
[第1楼]   [ 回复时间:2012-01-14 13:05 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
传入的是一个字,扫描码和ascii码都会传过来,而且扫描码和ascii码都可以进行判断,书中判断的是扫描码,也可以用ascii码进行判断。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved