• 汇编题目:按A键,当松开的时显示字母A


    安装一个新的int9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏的“A”;其他的按键照常处理。
    提示:按下一个键时产生的扫描码称为通码,松开一个键时产生的扫描码称为断码,断码 = 通码 + 80h

    我把程序改了下,按c键,在屏幕上显示B字母,程序代码如下:

    ;程序功能:按A键,当松开的时候在屏幕的80*25的里面全部显示字母A,不松开则不作任何处理,其他的键照常处理。
    
    assume cs:code
    data segment
    db 100 dup(0)
    
    data ends
    
    code segment
    start:    
        mov ax,0
        mov es,ax
        mov di,200h
        mov ds,ax
        mov si,[9*4]
        mov cx,4
        cld
        rep movsb
        
        mov ax,offset int9
        mov ds:[9*4],ax
        mov ax,cs
        mov ds:[9*4+2],ax
        
        call breakPoint
    
        ;还原int9中断向量表
        mov ax,0
        mov ds,ax
        mov si,200h
        mov di,9*4
        mov cx,4
        cld
        rep movsb
        
        
        mov ax,4c00h
        int 21h
    
    
    
    ;实现int9中断例程
    int9:
        cli
        push ax
        mov ax,0b800h
        push es
        mov es,ax
        
        push bx
        mov bx,0
        
        push cx
        mov cx,2000
        
        in al,60h
        cmp al,2eh+80h
        jne int9ret
        mov ah,'B'
        s0:
        mov byte ptr es:[bx],ah
        add bx,2
        loop s0
        
        int9ret:
        int 80h
        pop cx
        pop bx
        pop es
        pop ax
        iret
    
    
    breakPoint:
        push ax
        pushf
        pop ax
        or ah,3        ;这里可以增加判断,例:当cx为100的时候再设置断点
        push ax
        popf
        pop ax
        ret
    
    code ends
    end start

    运行:我使用的是win7+masm6.15环境,通过编译、链接后,使用debug xxx.exe的形式运行,直接按g命令,则会执行到断点处call breakPoint,这时候你按c键盘,就可以在屏幕上显示B字母了。

  • 相关阅读:
    第4章 Java并发编程的基础
    第3章 Java内存模型
    Ajax请求重复发送问题
    React的Hook函数之React.useState()、React.useEffect()
    Ajax GET请求和POST请求的基本操作
    使用pubsub-js来做消息的订阅和发布
    React配置代理解决跨域问题
    React中的函数式组件和类式组件
    JSX语法规则
    Hello React!
  • 原文地址:https://www.cnblogs.com/mq0036/p/5157577.html
Copyright © 2020-2023  润新知