汇编语言(第3版,王爽著):实验15 安装新的 int 9 中断例程

2022/5/27 1:21:25

本文主要是介绍汇编语言(第3版,王爽著):实验15 安装新的 int 9 中断例程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

实验15 安装新的 int 9 中断例程

1) 思路:

  1. 如果完整的看完了第 15 章节的内容,那么题目还是很简单的
  2. 只需要判断 A 键松开后,向端口 60h 发送的扫描码(即 A 键的断码为 9eh)

2) 代码实现:

文件名:exp15.asm

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 int9                         ; 设置 ds:si 指向源地址
        mov di, 204h                                ; 设置 es:di 指向目的地址
        mov cx, offset int9end - offset int9        ; 设置 cx 为传输长度
        cld                                         ; 设置传输方向为正
        rep movsb

        push es:[9*4]
        pop es:[200h]
        push es:[9*4+2]
        pop es:[202h]                               ; 保存原 int 9 中断例程的入口地址到 0:200 ~ 0:203

        cli
        mov word ptr es:[9*4], 204h
        mov word ptr es:[9*4+2], 0
        sti                                         ; 在中断向量表中设置新的 int 9 中断例程的入口地址

        mov ax, 4c00h
        int 21h

    int9:
        push ax
        push bx
        push cx
        push es

        in al, 60h                                  ; 从 60h 端口读出键盘的输入

        pushf
        call dword ptr cs:[200h]                    ; 模拟 int 指令调用原 int 9 中断例程(原 int 9 中断例程的地址在 0:200 ~ 0:203);当此中断例程执行时 (CS)=0

        cmp al, 9eh                                 ; A 键的断码为 9eh
        jne int9ret

        mov ax, 0b800h
        mov es, ax
        mov bx, 0
        mov cx, 2000
    s:
        mov byte ptr es:[bx], 'A'
        add bx, 2
        loop s

    int9ret:
        pop es
        pop cx
        pop bx
        pop ax
        iret

    int9end:
        nop
code ends

end start

3) 程序运行效果:

程序运行效果



这篇关于汇编语言(第3版,王爽著):实验15 安装新的 int 9 中断例程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程