汇编语言笔记:内中断

章节目录

  1. 概念
  2. 中断过程
  3. 示例: 0 号中断处理

作者能力有限, 如果您在阅读过程中发现任何错误, 还请您务必联系本人,指出错误, 避免后来读者再学习错误的知识.谢谢!

概念

中断信息:
任何一个通用 CPU 都具备一种能力, 可以在执行完当前正在执行的指令之后, 检测到从 CPU 外部发送过来的或者内部产生的一种特殊信息, 并且可以立即对所接受到的信息进行处理. 这种特殊的信息称为:中断信息. 中断意味着 CPU 不再继续向下执行, 而是转去处理这个特殊的信息.

CPU 内部产生的中断称为内中断

对于 8086 CPU, 有以下四种中断信息.

中断原因 中断类型码
除法错误 0
单步执行 1
执行 into 指令 4
执行 int 指令 n

中断类型码是中断来源信息的编码. 在 8086CPU 中使用一个字节的长度来编码中断源.

中断处理程序:
CPU 在收到中断信息之后, 需要对中断进行处理. 中断处理程序就是用来处理对应中断的程序. CPU 在收到中断信息之后, 就会转去执行对应的中断处理程序. 中断处理程序由程序员编写.

中断向量表: 是中断向量的列表.
中断向量: 是中断程序的入口地址.

中断向量表在内存中保存, 存放着 256 个中断源所对应的中断处理程序的入口地址. CPU 根据中断类型码作为中断向量表的表项号, 定位相应的表项, 从而得到中断处理程序的入口地址.

对于 8086PC 机, 中断向量表存放在 0000:0000 ~ 0000:03FF 所在的内存中. 每个表项占用两个字节的大小. 高地址字存放段地址, 低地址字存放偏移地址.

中断过程

  1. 从中断信息中获取中断类型码
  2. 标志寄存器的值入栈
  3. 设置标志寄存器的第八位 TF 和第九位 IF 的值为 0.
  4. CS 的内容入栈
  5. IP 的内容入栈
  6. 从内存地址为中断类型码*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. 汇编语言总结笔记 (四)

    汇编语言初识(一) 开始学习汇编语言,对相关的所学知识做个总结,希望对自己可以有所提高. 1.在计算机中数的表示方式 因为计算机中只能存储二进制数,所以一般都是通过二进制直接进行存储,但是为了方便阅读 ...

  2. Windows保护模式学习笔记(四)—— 中断门陷阱门

    Windows保护模式学习笔记(四)-- 中断门&陷阱门 要点回顾 中断描述符表(IDT) 一.中断门 实验:构造一个中断门 第一步:初步构造参数 第二步:确定 Offset in Segme ...

  3. 【汇编语言】王爽 - 内中断复习

    0 前言 基于王爽<汇编语言>和Coursera的<计算机组成>课程. 1 中断分类 CPU在执行指令的过程中,产生了一个异常/中断,因为CPU只能同时执行一条指令,所以需要暂 ...

  4. 汇编语言随笔(10)-内中断及实验12(返回到dos的中断处理程序)

    不同类型内中断的区分-中断类型码 8086cpu中在下面4种情况下会产生内中断:(1),除法错误 (如之前提到的除法溢出)      (2),单步执行      (3),执行into指令      ( ...

  5. 内中断---汇编学习笔记

    内中断 "中断信息"是要求CPU马上进行某种处理,并向所要进行的该种处理提供了必备的参数的通知信息. 12.1 内中断的产生 当CPU内部有下面的情况发生的时候,将产生相应的中断信 ...

  6. 汇编语言笔记(待更新大作业)

    文章目录 前言 计算机系统基础 概述 微处理器/中央处理器(CPU) 概述 性能指标与总线 前端总线(Front Side Bus) 带宽 数据总线DB/地址总线AB/控制总线CB CPU软件特性与指 ...

  7. 汇编语言笔记(全)(长文警告)

    汇编语言 最近系统的学了下汇编语言,下面是学习笔记,用的书是清华大学出版社出版的汇编语言第三版,作者王爽(最经典的那版). 文章目录 汇编语言 基础知识 **汇编语言指令组成** **CPU与外部器件 ...

  8. Servlet笔记四(JSP技术)

    本栏博客目录 Serlvet笔记一(Servlet基础) Servlet笔记二(请求和响应) Servlet笔记三(会话及其会话技术) Servlet笔记四(JSP技术) Servlet笔记五(EL表 ...

  9. 汇编语言笔记——接口技术与编程

    文章目录 传送门 储存系统与技术 材料 高速储存器缓冲储存器(Cache) 材料,局部性,访问方式 Cache全相联映射 Cache交换与一致性 单核CPU一致性处理 多核CPU的MESI协议 主储存 ...

最新文章

  1. 20180316 代码错题(1)
  2. python处理文本格式_python linecache 处理固定格式文本数据的方法
  3. 那些上海滩的金融传奇,或许都开始于一份PPT
  4. 关于QR二维码的编码模式
  5. 雷达的正交波形设计matlab源码,雷达系统设计MATLAB仿真
  6. 以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题
  7. layer mvc json 中文乱码处理
  8. 问题:html控件中sleect的Option()的用法
  9. 做外贸如何防止邮箱被封?已解决!
  10. 求饶不经过原点的旋转轴的旋转矩阵
  11. 从“Real如我”来看当前社交APP开发-深圳积木创意科技
  12. 数组类型的修改和去重
  13. RTL设计与编码指导
  14. 等保2.0正式发布了吗?核心思想包括什么?
  15. Windows 通过CMD指令导出的文件夹/文件的目录树
  16. java获取本周第一天的日期
  17. oracle 安装后密码,oracle 11g 安装后默认密码
  18. seo外链论坛发布工具-批量SEO外链论坛发布
  19. 通过logback-spring.xml配置,概述log4j与logback之间的使用
  20. 一文读懂Java 垃圾回收机制

热门文章

  1. 性能测试需求调研分析方法
  2. ubuntu-server-18.04 设置开机启动脚本
  3. 软考考前冲刺第一章计算机硬件基础知识
  4. 多线程的单元测试工具 - GroboUtils
  5. 数据库事务(Database Transaction)
  6. asp.net(C#)写SQL语句技巧
  7. Oracle Stream Replication技术
  8. ubuntu server版本安装指南(1)
  9. python调用大漠找图_[教程贴]按键精灵调用大漠插件后台找图示例
  10. admin select 2 异步_解决Angularjs异步操作后台请求用$q.all排列先后顺序问题