8086中断系统——《x86汇编语言:从实模式到保护模式》读书笔记04
80X86中断系统
- 能够处理256个中断
- 用中断向量号0~255区别
- 可屏蔽中断还需要借助专用中断控制器Intel 8259A实现优先权管理
1、中断的分类
中断可以分为内部中断和外部中断。
(1)内部中断
- 除法错中断
- 指令中断
- 溢出中断
- 单步中断
- 断点中断
(2)外部中断
- 非屏蔽中断
- 可屏蔽中断
如果觉得上面的分类太抽象,那么下面的图会给你直观的印象。
通过这张图,我们可以明白,内部中断是在处理器内部产生。外部中断是通过两个信号线(NMI和INTR)引入处理器内部的。
2.内部中断
(1)除法错中断
在执行除法指令时,若除数为0或商超过了寄存器所能表达的范围,则产生一个向量号为0的内部中断,称为除法错中断。
例如:
mov bl,0
idiv bl ;除数BL=0,产生除法错中断
再比如:
mov ax,200h
mov bl,1
div bl ;商=200H,不能用AL表达,产生除法错中断
(2)指令中断
在执行中断调用指令INT n时产生的一个向量号为n(0 ~ 255)的内部中断,称为指令中断。
(3)溢出中断
在执行溢出中断指令INTO时,若溢出标志OF为1,则产生一个向量号为4的内部中断,被称为溢出中断。
(4)单步中断
CPU在执行完一条指令之后,如果检测到标志寄存器的TF位为1,则产生单步中断,单步中断的向量号为1.
(5)断点中断
主要用在程序调试中,向量号为3,利用“int3(指令机器码为0xcc)”这条指令设置断点,目的是显示断点前程序的执行结果。
注意:内部中断不受标志寄存器IF位的影响。
3.外部中断
(1)非屏蔽中断
通过非屏蔽中断请求信号向微处理器提出的中断请求,微处理器无法禁止,将在当前指令执行结束予以响应,这个中断被称为非屏蔽中断。
非屏蔽中断的向量号为2,非屏蔽中断请求信号为NMI
非屏蔽中断主要用于处理系统的意外或故障。例如:电源掉电前的数据保护,存储器读写错误的处理。
(2)可屏蔽中断
通过INTR引脚引入CPU,只有当中断允许标志位IF=1时,才能被CPU响应。通过8259A,一个系统中可有多个可屏蔽中断。
4.实模式下的中断向量表
(1)中断向量
中断向量就是中断服务程序的入口地址。它有两部分组成:
- 中断服务程序所在段的段基址(2个字节)
- 中断服务程序入口的偏移地址(2个字节)
(2)中断向量表
每个中断向量占4个字节,256种中断向量总共占用1024字节。在8086系统中,所有的中断向量按类型码存放于内存的最低地址(00000H~003FFH)的1K单元中。存放中断向量的这1K单元称为中断向量表。
中断向量在中断向量表中的位置=中断类型号×4
N*4的字单元存放偏移地址;
N*4+2的字单元存放段基址。
5.中断类型号的获取
(1)对于除法出错,单步中断,不可屏蔽中断NMI,断点中断和溢出中断,CPU分别自动提供中断类型号0~4。
(2)对于用户自己确定的软件中断INT n,类型号由n决定。
(3)对外部可屏蔽中断INTR,CPU从可编程中断控制器8259A中获得中断类型号。
说明:
8086有两个引脚可以接收外部的中断请求:INTR和NMI
- 当NMI(非屏蔽中断请求)引脚上出现上升沿信号时,CPU立即无条件(不执行中断响应周期,不受标志寄存器IF位的影响)地转入"2号中断处理程序"。
- 当INTR(可屏蔽中断请求)引脚上出现高电平信号时,若IF=0,CPU不响应中断请求。若IF=1,CPU响应中断请求。CPU响应中断时,首先执行"中断响应周期",以便从中断控制器8259获得中断类型码,然后根据中断类型码转入相应的中断处理程序。
中断响应周期由两个总线周期构成
1.第一个总线周期
CPU向外设发出一个低电平的中断应答信号INTA*,表示已经接受申请,要求外设传送中断向量号
2.第二个总线周期
外设传送中断向量号,CPU在T4的下降沿采样数据总线,读入外设传送来的中断向量号(如下图)
6.中断过程
(1)中断请求
中断源向CPU发出请求中断信号。中断信号将被锁存,直到CPU响应中断后,中断请求信号才被清除。
(2)中断响应
CPU在执行每条指令的最后一个时钟周期检测中断请求信号。若发现中断请求信号有效,在允许中断的条件下,CPU响应中断。
响应中断的过程可以总结为:
- 取得中断类型码N;
- pushf
- TF=0,IF=0
- push CS
- push IP
- IP=N*4, CS=N*4+2,;转中断服务程序
7.中断处理程序和iret指令
中断处理程序的编写方法和子程序比较相似,下面是常规的步骤:
(1)保存用到的寄存器
(2)处理中断
注意:由于IF标志被设置为0,在中断处理中,处理器将不再响应硬件中断。如果希望更高优先级的中断嵌套,可以在编写中断处理程序时,适时用sti指令开放中断。
(3)恢复用到的寄存器
(4)用iret指令返回
iret指令的功能可以用汇编语法描述为:
pop IP
pop CS
popf
需要说明的是:中断向量表的建立和初始化工作是由BIOS在计算机启动时完成的。BIOS为每个中断号填写入口地址,因为它不知道多数中断处理程序的位置,所以一律将它们指向同一个入口地址,在那里只有一条指令:iret. 也就是说,当这些中断发生时,只做一件事情——立即返回。当计算机启动后,操作系统和用户程序再根据自己的需要,修改某些中断的入口地址,使它指向自己的代码。
8086中断系统——《x86汇编语言:从实模式到保护模式》读书笔记04的更多相关文章
- 进入保护模式(二)——《x86汇编语言:从实模式到保护模式》读书笔记14
首先来段题外话:之前我发现我贴出的代码都没有行号,给讲解带来不便.所以从现在起,我要给代码加上行号.我写博客用的这个插入代码的插件,确实不支持自动插入行号.我真的没有找到什么好方法,无奈之下,只能按照 ...
- ASM:《X86汇编语言-从实模式到保护模式》第11章:进入保护模式
★PART1:进入保护模式 1. 全局描述符表(Global Descriptor Table,GDT) 32位保护模式下,如果要使用一个段,必须先登记,登记的信息包括段的起始地址,段的 ...
- ASM:《X86汇编语言-从实模式到保护模式》第10章:32位x86处理器的编程架构
★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...
- 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16
一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...
- 进入保护模式(一)——《x86汇编语言:从实模式到保护模式》读书笔记12
之前已经做了一些理论上的铺垫,这次我们就可以看代码了. 一.代码清单 ;代码清单11-1 ;文件名:c11_mbr.asm ;文件说明:硬盘主引导扇区代码 ;创建日期:2011-5-16 19:54 ...
- 程序的载入和运行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25
程序的载入和运行(五)--<x86汇编语言:从实模式到保护模式>读书笔记25 前面几篇博文最终把代码分析完了.这篇就来说说代码的编译.运行和调试. 1.代码的编译及写入镜像文件 之前我们都 ...
- 存储器的保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记20
存储器的保护(三) 修改本章代码清单,使之可以检测1MB以上的内存空间(从地址0x0010_0000开始,不考虑高速缓存的影响).要求:对内存的读写按双字的长度进行,并在检测的同时显示已检测的内存数量 ...
- 存储器的保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记18
本文是原书第12章的学习笔记. 说句题外话,这篇博文是补写的,因为让我误删了,可恶的是CSDN的回收站里找不到! 好吧,那就再写一遍,我有坚强的意志.司马迁曰:“文王拘而演<周易>:仲尼厄 ...
- 进入保护模式(三)——《x86汇编语言:从实模式到保护模式》读书笔记17
(十)保护模式下的栈 ;以下用简单的示例来帮助阐述32位保护模式下的堆栈操作 mov cx,00000000000_11_000B ;加载堆栈段选择子 mov ss,cx mov esp,0x7c00 ...
- 《X86汇编语言:从实模式到保护模式》读书笔记之引言
有幸结识了<X86汇编语言:从实模式到保护模式>一书.我觉得这本书非常好,语言活泼,通俗易懂,源码丰富,受益匪浅.读罢一遍,意犹未尽.于是打算再读一遍,并把自己的读书所学总结成笔记,一来给 ...
随机推荐
- 多个fragment中重叠问题的解决方法
这个方法适用性有限. 我的是一个mainActivity,然后下部四个按钮,点击时先隐藏所有的fragment,然后再new一个新的出来,如果存在,则直接显示出来,看上去一切都没有问题. 但是通过fr ...
- android studio中使用recyclerview制作个显示考勤打卡的日历来
1. 用户在app端选择个日期就能查询这个月的考勤打卡信息,并以日历上标注不同的颜色来显示给用户,当然这个日历是recyclerview做出来的,只是每行显示7个,表示一周的七天. 2. 员工考勤打卡 ...
- C#操作excel打印
using System; using System.Data; using System.IO; using System.Runtime.InteropServices; using System ...
- EventTrigger
EventTrigger事件触发器. 相比较数据,属性,事件触发器是XAML的UI层中最重要的一个部分. 事件触发器中,触发的效果是动画,不再是setter. 也是很有意思的 <对象.Style ...
- Mysql高性能优化规范建议
数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意 ...
- utp
接口测试大致分为两种:数据驱动和代码驱动 数据驱动:主要处理用例之间没有关联关系的用例集合,一般以(excel.yaml)文件形式存储用例 代码驱动:主要是处理用例之间存在关联关系的用例(如:抽奖,需 ...
- luoguP2781 传教
https://www.luogu.org/problemnew/show/P2781 简化版题意:有 n 个数,初始值为 0,进行 m 次操作,每次操作支持将 [l, r] 加 v 和查询 [l, ...
- Application received signal SIGABRT
Application received signal SIGABRT (null) (( 0 CoreFoundation 0x0000000182bbadc8 <redacted> + ...
- 5、Numpy处理数据
转载自:http://old.sebug.net/paper/books/scipydoc/numpy_intro.html#id9 2 NumPy-快速处理数据 标准安装的Python中用列表(li ...
- JAVA基础——重新认识String字符串
深入剖析Java之String字符串 在程序开发中字符串无处不在,如用户登陆时输入的用户名.密码等使用的就是字符串. 在 Java 中,字符串被作为 String 类型的对象处理. String 类位 ...