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

简介: 本文为《汇编语言程序设计》1504小节例程。点击链接…进课程主页。任务:安装一个新的int 9中断例程 功能:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理。

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

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

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   ; 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 s

int9ret:
     pop es
     pop cx
     pop bx
     pop ax
     iret

int9end:nop

code ends
end start
目录
相关文章
|
4月前
|
传感器 数据采集 监控
QModbus例程分析
QModbus例程分析
|
4月前
|
存储
hyengine 寄存器问题之传递参数和接收返回值如何解决
hyengine 寄存器问题之传递参数和接收返回值如何解决
|
7月前
|
芯片
如何使用中断嵌套
如何使用中断嵌套
155 1
|
7月前
|
传感器
如何使用中断处理过程
如何使用中断处理过程
54 1
|
7月前
|
算法 Linux
易懂的方式讲解ARM中断原理以及中断嵌套方法
易懂的方式讲解ARM中断原理以及中断嵌套方法
311 0
|
存储 小程序 C语言
条件分支和循环机制、标志寄存器及函数调用机制
条件分支和循环机制、标志寄存器及函数调用机制
101 0
|
存储 编译器 C语言
CPU指令解析及函数调用机制
CPU指令解析及函数调用机制
283 0
西门子S7-200 SMART全局变量和局部变量如何使用,编写带参数子程序并调用
上篇文章中我们学习了西门子S7-200 SMART项目的编译、下载、运行调试及上传,本篇我们来介绍西门子S7-200 SMART的全局变量和局部变量如何使用,以及如何在编程软件STEP7-Micro/WIN SMART中编写带参数子程序并调用。我们先来介绍一下什么是全局变量和局部变量。符号表中定义的变量又称为全局变量,在所有的POU中都有效,在变量表中定义的变量称为局部变量,只在创建它的POU内部有效。
西门子S7-200 SMART全局变量和局部变量如何使用,编写带参数子程序并调用
|
编译器 C语言
C51 基本函数、中断函数和库函数的详解
本文详解了C51程序中的基本函数、中断函数和库函数
931 0