. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
主题 : :  关于实验十五的疑问,为什么我的这个程序不行?  [待解决] 回复[ 3次 ]   点击[ 384次 ]  
panna
[帖 主] [ 发表时间:2013-01-27 15:00 ] 
荣誉值:0
信誉值:0
注册日期:2013-01-10 18:38
assume cs:code

stack segment
        db 128 dup (0)
stack ends


code segment
start: 
      mov ax,stack
      mov ss,ax
      mov sp,128
      
      push cs
      pop ds
      
      mov ax,0
      mov es,ax
      
      mov si,offset newint9
      mov di,204h
      mov cx,offset endnewint9-newint9
      cld
      rep movsb
      
      push es:[9*4]
      pop es:200h
      push es:[9*4+2]
      pop es:202h
      
      cli
      mov word ptr es:[4*9],204h
      mov word ptr es:[4*9+2],0
      sti
   
      mov ax,4c00h
      int 21h

newint9:push dx
        push es
        push bx 
        push cx
       
       
   in al,60h
      
      pushf
      call dword ptr cs:[200h]
 
 s:   in al,60h
      cmp al,9eh  
      jne s
      ;关键是这个标号s.
      mov ax,0b800h
      mov es,ax
      
      xor bx,bx
      mov cx,2000
      
back: mov es:[bx],'A'
      add bx,2
      loop back


over: pop cx
      pop bx
      pop es
      pop dx
      iret      
      
      




endnewint9:nop



ends segment

end start


根据我的理解是这样的:输入键盘——产生扫描码(通码)——发送到60H端口——如果IF=1则引发INT 9——INT判断是打印到屏幕呀、或者是无效操作——IRET结束。
第一个问题:如果是断码会怎么样?求过程。

按照正确答案断码也会传送到60H端口,那么为什么一定要判断输入的是不是A的通码?我只要我要的9E(即a的断码)就可以了!问题如上,按我的说的应该没问题吧?但是为什么我的程序不可以呢?望高手解答,谢谢你们!
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved