ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-05-26 13:32:23  阅读:180  来源: 互联网

标签:15 例程 mov pop int push ax es


实验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) 程序运行效果:

程序运行效果

标签:15,例程,mov,pop,int,push,ax,es
来源: https://www.cnblogs.com/wanghuizhao/p/16313141.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有