| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 汇编语言:实验十二 编写0号中断的处理程序 -> 正文阅读 |
|
[系统运维]汇编语言:实验十二 编写0号中断的处理程序 |
实验内容编写0号中断处理程序,使得在除法溢出发生时,在屏幕中间显示字符串"divide error!",然后返回到DOS。 解题这一章都在介绍中断,包括中断的产生、中断处理程序、中断向量表、中断过程、相关指令。 分析整个中断过程(1)当发生除法溢出的时候,产生0号中断信息,从而引发中断。
对于第二步,为社么要将TF、IF设置为0? 只看表格中的第二行第一条的处理方式一栏:清除标志寄存器eflags的IF标志可屏蔽中断,笔者推测IF标志位的功能就是显示中断的开(On)关(Off),可以译为:Interrupt Flag,
这么想就能够串通了,只是用来屏蔽掉其他中断(处理中断的过程中关闭中断功能,确保能够顺利执行完本次中断,处理完成后再打开中断) 好了,现在明白CPU在发生中断之后做的事情了,那么我们需要完成什么呢? 按照王爽老师的讲解,将这段程序命名为 do0。 但是一个从未碰到过的问题来了:do0程序应该放到哪? 按理来说我们需要向操作系统申请一块空间去放置do0程序,但是过多的讨论申请内存将偏离问题的主线,所以这里简单做:直接使用一块别的程序不会用到的内存区,将do0拷贝到其中就可以了。 在 12.3 中断向量表 章节中作者讲解了中断向量表的存储位置(针对8086CPU): 根据书中的指示:0000:0200 到 0000:02FF 的256个字节的空间所对应的单元都是空的 do0程序的放置解决了,接下来就是当发生除法溢出的时候,CPU会取得中断码0,然后到(4 * 0) = 0H的地址(0000:0000H)去找中断处理程序的偏移地址,到(4 * 0 + 2) = 2H的地址找中断处理程序的段地址。 总结一下将要做的事情:
程序框架: 安装do0程序与设置中断向量表需要明晰的是:我们编写的程序在运行时do0处的代码是不执行的! 安装do0程序将编写好的do0程序代码送入到0000:0200H内存段中,需要使用到 movsb指令,如下(由于csdn没有比较好展示汇编代码的方式,这里笔者先放上Notepad++中的截图方便查看):
设置中断向量表对于0号中断,我们需要在0000:0000处填上偏移地址,在0000:0004处填上中断处理程序段地址。 编写do0程序do0程序需要做的: 这个相关处理指的是什么?
完整代码
效果展示 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 16:43:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |