汇编题目:按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字母了。

posted on   jack_Meng  阅读(735)  评论(0编辑  收藏  举报

编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏

主题色彩