改写中断例程的方法(1504)

来源:互联网 发布:centos搭建git服务器 编辑:程序博客网 时间:2024/05/16 18:23

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

任务:安装一个新的int 9中断例程
功能:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理。
程序:

assume cs:codestack segment     db 128 dup (0)stack endscode segmentstart:     ; 设置各段地址     mov ax,stack    ; 栈段     mov ss,ax     mov sp,128     push cs   ; ds与cs相同     pop ds     mov ax,0      ; 附加段     mov es,ax     ; 安装新程序     mov si,offset int9     mov di,204h     mov cx,offset int9end - offset int9     cld     rep movsb     ; 将原中断地址保存在0:200单元处     push es:[9*4]     pop es:[200h]     push es:[9*4+2]     pop es:[202h]     ; 改变后中断的入口地址     cli     mov word ptr es:[9*4],204h     mov word ptr es:[9*4+2],0     sti     mov ax,4c00h     int 21h     ;定义新中断例程int9:push ax     push bx     push cx     push es     in al,60h     pushf     ; 调用旧中断例程     call dword ptr cs:[200h]     ; 处理F1键     cmp al,3bh     jne int9ret     mov ax,0b800h     mov es,ax     mov bx,1     mov cx,2000  s: inc byte ptr es:[bx]     add bx,2     loop sint9ret:     pop es     pop cx     pop bx     pop ax     iretint9end:nopcode endsend start