汇编语言笔记(四):内中断
汇编语言笔记:内中断
章节目录
- 概念
- 中断过程
- 示例: 0 号中断处理
作者能力有限, 如果您在阅读过程中发现任何错误, 还请您务必联系本人,指出错误, 避免后来读者再学习错误的知识.谢谢!
概念
中断信息:
任何一个通用 CPU 都具备一种能力, 可以在执行完当前正在执行的指令之后, 检测到从 CPU 外部发送过来的或者内部产生的一种特殊信息, 并且可以立即对所接受到的信息进行处理. 这种特殊的信息称为:中断信息. 中断意味着 CPU 不再继续向下执行, 而是转去处理这个特殊的信息.
CPU 内部产生的中断称为内中断
对于 8086 CPU, 有以下四种中断信息.
中断原因 | 中断类型码 |
---|---|
除法错误 | 0 |
单步执行 | 1 |
执行 into 指令 | 4 |
执行 int 指令 | n |
中断类型码是中断来源信息的编码. 在 8086CPU 中使用一个字节的长度来编码中断源.
中断处理程序:
CPU 在收到中断信息之后, 需要对中断进行处理. 中断处理程序就是用来处理对应中断的程序. CPU 在收到中断信息之后, 就会转去执行对应的中断处理程序. 中断处理程序由程序员编写.
中断向量表: 是中断向量的列表.
中断向量: 是中断程序的入口地址.
中断向量表在内存中保存, 存放着 256 个中断源所对应的中断处理程序的入口地址. CPU 根据中断类型码作为中断向量表的表项号, 定位相应的表项, 从而得到中断处理程序的入口地址.
对于 8086PC 机, 中断向量表存放在 0000:0000 ~ 0000:03FF 所在的内存中. 每个表项占用两个字节的大小. 高地址字存放段地址, 低地址字存放偏移地址.
中断过程
- 从中断信息中获取中断类型码
- 标志寄存器的值入栈
- 设置标志寄存器的第八位 TF 和第九位 IF 的值为 0.
- CS 的内容入栈
- IP 的内容入栈
- 从内存地址为中断类型码*4和中断类型码*4+2的两个单元中读取中断处理程序的入口地址放入IP和CS中
这个过程由 CPU 完成.
示例: 0 号中断处理
下面的示例中, 我们将完成一个处理除法溢出的中断处理程序. 完成后, 先执行中断处理程序, 然后当系统发生除法中断, 我们的中断处理程序就会被执行, 在屏幕中央显示 “overflow!” 字符串.
中断处理程序:
程序一开始, 我们将我们的中断处理程序 do0 和 do0Start 存储在内存位置 0:200H 开始的地址中. 没有直接申请对应的内存, 是因为不想涉及操作系统相关的操作. 0000:0000 ~ 0000:03FF 这段地址本是用来存放中断向量表的, 但是大部分情况下并没有那么多的中断处理程序, 因此我们就借用了这段地址来存储我们的中断处理程序. 将 do0 存到 0:200H 的地址中这个操作 我们使用了 movsb 指令.
中断处理程序 do0Start 完成在屏幕上显示 “overflow!” 的功能. 这里, 我们将 “overflow!” 字符串保存在代码段中, 是为了一起复制到 0:200H 中去. 如果我们为该字符串单独定义一个数据段, 那么为了能访问该数据段, 我们还需要额外的将该数据段也复制到 0:200H 相应的内存中去. 为了避免麻烦, 我们这里直接将它写在代码段中, 这样数据会和代码一次性被拷贝到相应内存中去.
因为我们处理的的是0号中断, 因此我们在设置中断向量表时, 是将对应的中断处理程序地址(0:200h) 分别设置到 0:2 和 0:0 中去.
如果单纯的编译运行该程序, 不会有任何输出, 因为该程序只是完成将0号中断处理程序保存在内存地址 0:200H 开始的内存地址中, 并将该程序的内存地址保存到 0 号对应的向量表中, 以便当发生除法中断时, 该程序会被调用.
测试代码:
使用如下代码测试一下我们的程序是否成功运行.
在我的机器上运行效果如下:
欢迎交流任何想法.
End…
汇编语言笔记(四):内中断相关推荐
- 汇编语言总结笔记 (四)
汇编语言初识(一) 开始学习汇编语言,对相关的所学知识做个总结,希望对自己可以有所提高. 1.在计算机中数的表示方式 因为计算机中只能存储二进制数,所以一般都是通过二进制直接进行存储,但是为了方便阅读 ...
- Windows保护模式学习笔记(四)—— 中断门陷阱门
Windows保护模式学习笔记(四)-- 中断门&陷阱门 要点回顾 中断描述符表(IDT) 一.中断门 实验:构造一个中断门 第一步:初步构造参数 第二步:确定 Offset in Segme ...
- 【汇编语言】王爽 - 内中断复习
0 前言 基于王爽<汇编语言>和Coursera的<计算机组成>课程. 1 中断分类 CPU在执行指令的过程中,产生了一个异常/中断,因为CPU只能同时执行一条指令,所以需要暂 ...
- 汇编语言随笔(10)-内中断及实验12(返回到dos的中断处理程序)
不同类型内中断的区分-中断类型码 8086cpu中在下面4种情况下会产生内中断:(1),除法错误 (如之前提到的除法溢出) (2),单步执行 (3),执行into指令 ( ...
- 内中断---汇编学习笔记
内中断 "中断信息"是要求CPU马上进行某种处理,并向所要进行的该种处理提供了必备的参数的通知信息. 12.1 内中断的产生 当CPU内部有下面的情况发生的时候,将产生相应的中断信 ...
- 汇编语言笔记(待更新大作业)
文章目录 前言 计算机系统基础 概述 微处理器/中央处理器(CPU) 概述 性能指标与总线 前端总线(Front Side Bus) 带宽 数据总线DB/地址总线AB/控制总线CB CPU软件特性与指 ...
- 汇编语言笔记(全)(长文警告)
汇编语言 最近系统的学了下汇编语言,下面是学习笔记,用的书是清华大学出版社出版的汇编语言第三版,作者王爽(最经典的那版). 文章目录 汇编语言 基础知识 **汇编语言指令组成** **CPU与外部器件 ...
- Servlet笔记四(JSP技术)
本栏博客目录 Serlvet笔记一(Servlet基础) Servlet笔记二(请求和响应) Servlet笔记三(会话及其会话技术) Servlet笔记四(JSP技术) Servlet笔记五(EL表 ...
- 汇编语言笔记——接口技术与编程
文章目录 传送门 储存系统与技术 材料 高速储存器缓冲储存器(Cache) 材料,局部性,访问方式 Cache全相联映射 Cache交换与一致性 单核CPU一致性处理 多核CPU的MESI协议 主储存 ...
最新文章
- 20180316 代码错题(1)
- python处理文本格式_python linecache 处理固定格式文本数据的方法
- 那些上海滩的金融传奇,或许都开始于一份PPT
- 关于QR二维码的编码模式
- 雷达的正交波形设计matlab源码,雷达系统设计MATLAB仿真
- 以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题
- layer mvc json 中文乱码处理
- 问题:html控件中sleect的Option()的用法
- 做外贸如何防止邮箱被封?已解决!
- 求饶不经过原点的旋转轴的旋转矩阵
- 从“Real如我”来看当前社交APP开发-深圳积木创意科技
- 数组类型的修改和去重
- RTL设计与编码指导
- 等保2.0正式发布了吗?核心思想包括什么?
- Windows 通过CMD指令导出的文件夹/文件的目录树
- java获取本周第一天的日期
- oracle 安装后密码,oracle 11g 安装后默认密码
- seo外链论坛发布工具-批量SEO外链论坛发布
- 通过logback-spring.xml配置,概述log4j与logback之间的使用
- 一文读懂Java 垃圾回收机制
热门文章
- 性能测试需求调研分析方法
- ubuntu-server-18.04 设置开机启动脚本
- 软考考前冲刺第一章计算机硬件基础知识
- 多线程的单元测试工具 - GroboUtils
- 数据库事务(Database Transaction)
- asp.net(C#)写SQL语句技巧
- Oracle Stream Replication技术
- ubuntu server版本安装指南(1)
- python调用大漠找图_[教程贴]按键精灵调用大漠插件后台找图示例
- admin select 2 异步_解决Angularjs异步操作后台请求用$q.all排列先后顺序问题