文章目录

  • 中断向量表
    • 介绍
    • 索引方式:
    • 修改中断向量表
  • 自定义中断
    • 思路
    • 实现效果:
    • 实现代码
    • 执行步骤

中断向量表

介绍

在dos系统中,总共设计了256种中断,每个中断都有一个中断号,通过中断号来映射中断程序的地址。为了实现映射的功能,引入中断向量表。规定中断向量表的起始地址为0000h,结束地址为03FF,即(0000000000)b~(1111111111)b,总共占用了前1024个字节。
注:0200h~02FFh地址空闲,还没有给定中断向量地址

索引方式:

中断向量表的索引地址由两部分构成,分别是CS和IP,其低地址存放IP,高地址存放CS。当触发中断号x时,操作系统先保存PSW和PC到核心栈中,然后设置IP=[0000:[x*2]],CS=[0000:[x*2+2]],然后进行中断调用。
例如:
当触发21h号中断时,系统先保存PSW和PC,然后将IP设置为[0000:[42h]],CS设置为[0000:[44h]],然后执行中断调用。

修改中断向量表

修改中断向量表,其实就是修改目标中断的CS和IP的值,让中断发生时,CS:IP指向我们自定义的中断。
比如修改0号中断的中断向量表。

    mov ax, 0mov es, axmov word ptr es:[0*4], 200hmov word ptr es:[0*4+2],0;设置中断向量表

自定义中断

思路

前面我们已经说到,0200h~02FFh这个地址空间是空闲的,可以用来存放程序。而中断向量表的作用是用于索引中断向量,于是,我们可以利用修改中断向量表,使其指向我们自定义的中断程序,便可以实现自定义中断的效果。

实现效果:

0号中断为除数为0中断,将其自定义为:在屏幕的正中央输出heppen 0 interrupt。

实现代码

伪码描述:
1.根据中断号找到中断向量地址。
2.修改中断向量地址为我们自定义的中断向量地址。
3.运行设置程序do0.exe
4.运行测试程序test.exe
汇编代码

;do0.asmassume cs:codesgcodesg segment
start: mov ax, csmov ds, ax;源段地址mov si, offset do0;源地址偏移mov ax, 0mov es, ax;目标段地址mov di, 200h;目标地址偏移mov cx, offset do0end - offset do0;目标地址长度cld;设置传输方向为正rep movsb;ds:[si]->es:[di] 循环cx次mov ax, 0mov es, axmov word ptr es:[0*4], 200hmov word ptr es:[0*4+2],0;设置中断向量表mov ax, 4c00hint 21h;
do0:jmp short do0startdb "happen 0 interrupt";中断后显示的数据
do0start:mov ax, 0hmov ds, axmov si, 202h;数据的起始地址mov ax, 0B800hmov es, axmov di, 12*160+36*2;设置显示位置mov cx, 18s:  mov al,[si];将数据放入显存mov ah,0FFhmov es:[di], axinc siadd di, 2loop smov ax, 4c00hint 21hdo0end:nop
codesg endsend start
;test.asmassume cs:codesgcodesg segment
start:mov ax, 12hmov dx, 0hdiv dxmov ax, 4c00hint 21h
codesg ends
end start

执行步骤

1.ml do0.asm
2.do0.exe
3.ml test.asm
4.do0.exe
也可以逐步编译,连接
1.masm do0.asm
2.link do0.obj
3.do0.exe
4.masm test.asm
5.link test.obj
6.test.exe

汇编_修改中断向量表_自定义中断相关推荐

  1. python基础-PyCharm设置作者信息模板_修改解释器_设置软件UTF-8编码

    python基础-PyCharm设置作者信息模板_修改解释器_设置软件UTF-8编码 一.PyCharm 设置作者信息模板 1.File---Settings---在搜索框中搜索:File and C ...

  2. MySQL数据库创建用户_修改用户_删除用户_设置用户

    文章目录 创建新用户 使用 CREATE USER 语句创建用户 创建新用户,并且使用哈希值设置密码 创建一个只能在数据库所在主机访问数据库的用户 创建一个只能从指定 IP 连接数据库的用户 创建一个 ...

  3. 微信链接修改图片_微信链接修改图标

    自定义链接是什么?微信链接修改图片_微信链接修改图标 自定义微信分享链接是指将一条网页链接通过微信接口生成一张卡片,并且该卡片的标题,内容和图片都可以自己编辑.如下图效果 ● 未自定义的网页链接 ● ...

  4. Revit二次开发_修改快捷键

    目录 示例代码 Revit 2019命令ID 快捷键设置规则 保留的快捷键 Revit官方的似乎并没有提供修改快捷键的api,感谢@魏无忌的这篇博文--Revit开发之快捷键相关类_魏无忌的博客-CS ...

  5. 奥德赛修改器_语音奥德赛2020的声音在演讲者嵌入方面取得了进步

    奥德赛修改器 At Speech Odyssey 2020 IQT Labs sponsored a special session on applications of VOiCES, a data ...

  6. 图元变形lisp源码_修改图元图层lisp

    ( )改变选择图元所属层为最后选择地图元地层(类似于,但选择图元地顺序正好相反) 图层命令希望大家能花一点时间熟悉并掌握,当然,前提条件是图纸中地图元图层设置...... ? 二.常用图元组码: 0 ...

  7. c语言程序设计实验指导交大答案,C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc...

    C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc 实验一 Visual C集成环境实验内容(一)程序改错1.(1)无法运行(2)将第二个C程序重 ...

  8. lisp修改上一个图素_修改图块基点(已解决) - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...

    ;;;图块基点修改 ,但图块实际位置保持不变 ;;;明经通道 编制 By Gu_xl 2011年7月 (defun c:CBB () (c:BlockBase)) (defun c:BlockBase ...

  9. Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁

    1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...

最新文章

  1. linux下如何更新镜像源(ubuntu 10.04 为例),Ubuntu 10.04 更新源补充
  2. 不要瞧不起技术,项目中有了技术管理会让项目经理很省心
  3. 未来CPU内核将更简单!
  4. 王爽《汇编语言第三版》实验10-1代码实现
  5. windows mysql提示:1045 access denied for user 'root'@'localhost' using password yes 解决方案
  6. 使用pagination分页插件实现Ajax动态分页
  7. bootstrap --- 弹出对话框
  8. jQuary总结11:jQuery插件封装---jQuery封装 手风琴 动画插件
  9. FreeRTOS及其应用,万字长文,基础入门
  10. Docker-Windows 2008 R2安装使用
  11. C++ 复杂、内存漏洞,2019 年的软件开发并不安全!
  12. 地图整饰-框架与格网
  13. 多校训练 Naive Operations线段树区间更新
  14. 为何 linux 要用 tar.gz,而不用 7z 或 zip?
  15. QXDM 存储log的方法
  16. Matlab 使用四阶龙格库塔求解二阶隐式微分方程_ode45
  17. 计算机毕业设计Java共享充电宝管理系统(源码+系统+mysql数据库+Lw文档)
  18. 2021年服创国赛参赛小结
  19. 用Java实现简易计算器
  20. SOUI视频教程 官方论坛

热门文章

  1. 计算机毕业设计Java乐居租房网的设计与实现(源码+系统+mysql数据库+lW文档)
  2. 爱福特机器人地址_在福特工厂,波士顿动力公司的机器狗现场与一个新的机器人朋友组队
  3. 【6】实战:利用re模块爬取淘宝商品信息
  4. miniui mysql_MiniUi系列 jQuery 事件 - delegate() 方法
  5. TCP,UDP的报头详解
  6. 怎么知道自己是否适合计算机专业,如何判断热门专业是否适合自己?
  7. [论文阅读笔记42]BioSyn
  8. 《C和指针》笔记(十四)-- 经典抽象数据类型
  9. 是时候更换你的桌面音乐播放软件了
  10. ffmpeg一键压特效+小丸工具箱压mod特效的方法