定制键盘输入处理(1503)

简介: 本文为《汇编语言程序设计》1503小节例程。点击链接…进课程主页。任务:在屏幕中间依次显示 ‘a’~’z’ ,并可以让人看清,在显示的过程中,按下Esc键后,改变显示的颜色。

本文为《汇编语言程序设计》1503小节例程。点击链接…进课程主页。

任务:在屏幕中间依次显示 ‘a’~’z’ ,并可以让人看清,在显示的过程中,按下Esc键后,改变显示的颜色。
程序:
v0.2

assume cs:code
code segment
start:  mov ax,0b800h
            mov es,ax
            mov ah,'a'
        s: mov es:[160*12+40*2],ah
            inc ah
            cmp ah,'z'
           jna s
          mov ax,4c00h
          int 21h
code ends
end start

v0.4

assume cs:code
stack segment
        db 128 dup (0)
stack ends

code segment
start:  mov ax,stack
        mov ss,ax
        mov sp,128

        ; 显示字符
        mov ax,0b800h
        mov es,ax
        mov ah,'a'
    s:  mov es:[160*12+40*2],ah
        call delay
        inc ah
        cmp ah,'z'
        jna s

        mov ax,4c00h
        int 21h

        ; 定义延时函数
delay:  push ax
        push dx
        mov dx,10h
        mov ax,0
   s1:  sub ax,1
        sbb dx,0
        cmp ax,0
        jne s1
        cmp dx,0
        jne s1
        pop dx
        pop ax
        ret

code ends
end start

v1.0

assume cs:code

stack segment
         db 128 dup (0)
stack ends

data segment
         dw 0,0
data ends

code segment
start:  mov ax,stack
        mov ss,ax
        mov sp,128
        mov ax,data
        mov ds,ax

        ; 改中断例程入口地址
        mov ax,0
        mov es,ax
        push es:[9*4]
        pop ds:[0]
        push es:[9*4+2]
        pop ds:[2]
        mov word ptr es:[9*4],offset int9
        mov es:[9*4+2],cs

        ; 显示'a'~'z'
        mov ax,0b800h
        mov es,ax
        mov ah,'a'
   s:   mov  es:[160*12+40*2],ah
        call delay
        inc ah
        cmp ah,'z'
        jna s
        mov ax,0
        mov es,ax

        ; 恢复原来的地址
        push ds:[0]
        pop es:[9*4]
        push ds;[2]
        pop es;[9*4+2]

        mov ax,4c00h
        int 21h

        ; 定义延迟程序
delay:  push ax
        push dx
        mov dx,10h
        mov ax,0
   s1:  sub ax,1
        sbb dx,0
        cmp ax,0
        jne s1
        cmp dx,0
        jne s1
        pop dx
        pop ax
        ret

        ; 定义中断例程
int9:   push ax
        push bx
        push es
        in al,60h
        pushf
        pushf
        pop bx
        and bh,11111100b
        push bx
        popf
        call dword ptr ds:[0]

        cmp al,1 ; ESC扫描码1
        jne int9ret
        ;改变颜色
        mov ax,0b800h
        mov es,ax
        inc byte ptr es:[160*12+40*2+1]
int9ret:pop es
        pop bx
        pop ax
        iret

code ends
end start

注:此程序运行后,键盘功能将失效。程序中潜伏着一个不引人注目的小bug。——先请自行找一找

目录
相关文章
|
1月前
从键盘输入一些字符
【7月更文挑战第9天】从键盘输入一些字符。
41 15
|
8月前
C程序需要按下回车键才能读取字符
C程序需要按下回车键才能读取字符
35 0
|
10月前
|
Windows
12.2 实现键盘模拟按键
本节将向读者介绍如何使用键盘鼠标操控模拟技术,键盘鼠标操控模拟技术是一种非常实用的技术,可以自动化执行一些重复性的任务,提高工作效率,在Windows系统下,通过使用各种键盘鼠标控制函数实现动态捕捉和模拟特定功能的操作。键盘鼠标的模拟是实现自动化的必备流程,通常我们可以使用`keybd_event()`实现对键盘的击键模拟,使用`SetCursorPos()`实现对鼠标的模拟,使用两者的配合读者可以很容易的实现对键盘鼠标的控制,本节将依次封装实现,模拟键盘鼠标控制功能,读者可根据自己的实际需求选用不同的函数片段。
61 0
12.2 实现键盘模拟按键
|
10月前
|
Unix C++ iOS开发
C++如何从键盘输入文件结束符
C++如何从键盘输入文件结束符
|
小程序 开发工具
如何在小游戏使用键盘进行输入
本文主要内容是在微信小游戏制作工具中使用“键盘”插件,来实现玩家在小游戏中通过键盘进行输入操作的功能。 如果你没有任何的游戏开发经验,欢迎观看我的“人人都能做游戏”系列视频教程,它会手把手的教你做出自己的第一个小游戏。 在游戏中经常需要使用到键盘,让玩家能够在游戏中进行输入操作。今天就分享一下如何在微信小游戏制作工具中使用键盘进行输入。
470 0
|
图形学
Input鼠标键盘输入
Input鼠标键盘输入
85 0
|
存储 Unix C语言
理解缓冲区,字符 I/O和结束键盘输入
理解缓冲区,字符 I/O和结束键盘输入
231 0
理解缓冲区,字符 I/O和结束键盘输入
|
消息中间件 文字识别 语音技术