zoukankan      html  css  js  c++  java
  • [Assembly]汇编编写简易键盘记录器

    环境:
    Windows xp sp3
    工具:
    masm
    notepad++

    首先列出本次编程程序要执行的步骤:
    (1)、读取键盘所输入的字符
    (2)、输出到屏幕上
    (3)、完善Esc、Backspace、空格、回车的输出

    首先解决(1)
    这里我们可以利用int 16h的中断功能读取字符缓存区的字符

    mov ah,0
    int 16h

    执行完int 16h后 ah=扫描码 al=ASCII码

    例如我们输入abc后
    字符缓存区如下状态

    然后执行int 16h
    缓存区状态如下

    前面的1E61被读进了ah和al

    解决(2)
    既然解决了(1),也成功读取了ASCII码到al中
    这时候就是输出字符到屏幕上了

    这里可以用内存中的b800H~bffffH这段32KB的空间输出
    B800:0000就对应屏幕上第一列第一行了

    mov ax,0b800h
    mov es,ax
    mov ah,2
    mov al,41
    mov es:[si],ax
    add si,2

    高位存放该字符的属性 这里ah=2代码字符以绿色输出
    地位存放该字符的ASCII码 这里选择41H(A)来测试

    可以明显看到左上角屏幕出现了A

    最后可以编写出大概的程序如下;

    assume cs:code
    code segment
    start:
    mov cx,2h
    mov si,0
    ints:
    mov ah,0
    int 16h
    mov bl,al
    mov ax,0b800h
    mov es,ax
    mov al,bl
    mov ah,2
    mov es:[si],ax
    add si,2
    add cx,1
    loop ints
    mov ax,4c00h
    int 21h
    
    code ends
    end start

    执行完int16h之后就不断的往屏幕上输出,然后si+2指向下一个字符输出的屏幕地址

    随便输入几个字符,可以成功在屏幕上输出

    接下来优化下Esc、Backspace、空格、回车的输出
    根据上面的编程,已经知道程序是根据ASCII码到屏幕上输出的,可是Esc、Backspace、空格、回车的ASCII码不太明显
    这里用cmp指令判断Esc、Backspace、空格、回车的扫描码,然后再修改对应的al中的ASCII码
    程序如下

    assume cs:code
    code segment
    start:
    mov cx,2h
    mov si,0
    ints:
    mov ah,0
    int 16h
    cmp ah,1ch
    je ent
    cmp ah,39h
    je kg
    fh:mov bl,al
    mov ax,0b800h
    mov es,ax
    mov al,bl
    mov ah,2
    mov es:[si],ax
    add si,2
    add cx,1
    loop ints
    mov ax,4c00h
    int 21h
    
    ent:
    mov al,19h
    jmp fh
    kg:
    mov al,07h
    jmp fh
    
    code ends
    end start

    编译后我们依次输入Esc、空格、回车、Backspace

    可以看到屏幕出现了←(Esc)•(空格)↓(回车)◘(Backspace)


    最后附上各个键盘的扫描码

    注意,,程序中用了死循环!

  • 相关阅读:
    转载--C 的回归
    学嵌入式不是你想的那么简单--转载
    scanf() 与 gets()--转载
    getchar、getch、getche 与 gets()
    scanf()函数原理
    C/C++头文件一览
    再论函数指针、函数指针数组
    初论函数指针、指针函数、指针的指针
    转载--一个“码农”自述的血泪史:当了35年程序员,我最大的遗憾就是没抓住机遇转行
    转载--协方差的意义和计算公式
  • 原文地址:https://www.cnblogs.com/wh4am1/p/7708373.html
Copyright © 2011-2022 走看看