精华内容
下载资源
问答
  • 中断处理过程

    万次阅读 2019-08-13 16:05:45
    概念 中断全过程指的是从中断源发出中断请求开始,CPU响应这个请求,现行程序被中断,转至中断服务程序,直到中断...大体上可以把中断全过程分为5个阶段:中断请求、中断判优、中断响应、中断处理和中断返回。 ...

    中断
    在CPU执行程序的过程中,出现了某种紧急情况或异常的事件时,暂停正在执行的程序,转去处理该事件,并在处理完该事件之后返回断点处(指返回主程序时执行的第一条指令的地址)继续执行刚刚被暂停的程序。
    中断源
    任何引发中断的事件。
    中断分类
    1)硬件中断(即外中断)
    (1)非屏蔽中断(NMI):整个系统只有一个。
    (2)可屏蔽中断(INTR)
    2)软件中断(内中断)
    (1)除法错误中断
    (2)溢出中断
    (3)单步中断
    (4)断点中断
    (5)中断指令INT n中断
    单步中断和断点中断用来调试程序
    中断优先级:8086的中断优先级排序:内中断(除单步中断),NMI,INTR,单步中断。
    中断向量表:是存放中断向量(中断服务程序的入口地址)的一个特定的内存区域。这里有必要注意一下,8086可以处理256种中断。
    中断处理步骤
    (1)中断请求:中断源向CPU发出中断请求
    (2)中断响应
    (3)保护断点和现场:以便在中断服务程序执行后正确的返回主程序。
    (4)中断处理
    (5)中断返回
    8086中断处理步骤
    (1)内部中断以及NMI中断不需要从数据总线上读取中断类型码,而INTR需要,而且该中断类型码由发出中断请求的接口电路提供。
    (2)CPU得到中断类型码后将标志寄存器内容压入栈中(PUSHF),保护中断时标志位的状态。
    (3)令单步标志TF =0(禁止CPU以单步方式执行中断服务程序)。
    (4)令中断允许标志IF=0(即:在响应该中断后不再响应别的中断。由于CPU在中断响应时,自动将IF置为0,如果要允许中断嵌套,必须在后面的中断服务程序中用开中断指令STI重新将IF置为1)
    (6)将当前CS:IP入栈,即保护断点和现场。
    (7)根据中断类型码在中断向量表中找到相应中断服务程序的入口地址,将其装入CS:IP,转向中断服务程序。
    (8)为了保证NMI中弄断有着实质性的优先级,所以在执行中断服务之前需要再次检查是否有NMI中断。
    (9)执行中断服务程序。
    (10)IRET指令实现原CS:IP,标志寄存器的出栈,即恢复断点并返回到主程序。

    展开全文
  •  中断处理过程:一次完整的中断过程由中断请求、中断响应和中断处理三个阶段组成。  中断处理流程:关中断->保存断电保护现场->判断中断源转到相应的中断服务->开中断->执行相应的中断服务程序(ISR)->关中断->...
    
    在程序员面试和笔试中中断是一个经常被问及的很基础的问题,本文对这次问题做一点简单说明。

         中断处理过程:一次完整的中断过程由中断请求、中断响应和中断处理三个阶段组成。

         中断处理流程:关中断->保存断电保护现场->判断中断源转到相应的中断服务->开中断->执行相应的中断服务程序(ISR)->关中断->恢复现场恢复断点->开中断->返回断点

        中断服务程序的限制

    (1)ISR 没有参数并且返回类型为 void
    2ISR 不可以重复进入,不要在 ISR内允许中断。

    3)当中断发生时系统会自己响应。用户不要调用它。

    4ISR 中不要调用任何 C 自定义函数,但是内置的函数没有关系。ISR 中可调用汇编函数。
    5)如果 ISR 内包含嵌入汇编指令,那么由于执行这些指令而影响到的寄存器就需要在执行这些指令之前预先保留,待执行完毕恢复寄存器。 因为Holtek C编译器只保存由于C语句造成影响的寄存器。

    6ISR内不能有可能导致阻塞的语句如:malloc

    7)避免在ISR中做浮点运算,在许多处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额外的寄存器入栈,有些处理器/编译器就不允许在ISR中做浮点运算。此外,ISR应该是段而有效率的,在ISR中做浮点运算是不明智的。

    有了以上知识,下面的题目应该是小Case了

    1. 下面的ISR有何问题(华硕公司2005年软件工程师面试)  
    2. _interrupt double compute_area(double radius)  
    3. {  
    4.     double area = PI*radius*radius;  
    5.     printf("/nArea=%f",area);  
    6.     return area;  
    7. };  

    展开全文
  • 一,中断的定义 二 ,中断处理过程 三,8086/8088CPU可以处理256种不同类型的终端 四,中断服务程序的设计方法 五中断向量表的建立

    一,中断的定义
    在CPU执行程序的过程中,出现了某种紧急或异常的事件(中断请求),CPU需要暂时停止正在执行的程序,转去处理该事件(执行终端服务程序),并在处理完毕后,返回断点继续执行被暂停的程序,这一过程,称为中断。
    二 ,中断处理的过程主要有五步
    1.中断请求
    2.中断响应
    3.保护断点
    4.中断处理
    5.中断返回
    三,8086/8088CPU可以处理256种不同类型的终端
    四,中断服务程序的设计
    1.用户在设计中断服务程序时要预先确定一个中断类型号,不论是硬件中断还是软件中断,都只能在系统预留给用户的类型号中选择,
    2.确定中断类型号之后还要把中断服务程序入口地址置入中断向量表,以确保在中断响应时CPU能自动转入该类型号相对应的中断服务程序。
    3.中断向量表的建立
    设用户定义的中断类型号为60H
    1)DOS系统功能调用法
    功能号:(AH)=25H
    入口参数:
    (AL)=中断类型号
    (DS)=中断服务程序的入口地址的段地址
    (DX)=中断服务程序的入口地址的段地址
    下面程序段完成中断类型号为 60H的中断服务程序的入口地址的置入

    PUSH	DS          //保护DS
    MOV	DX,	OFFSET INT _60     //取中断服务程序INT_60的偏移地址
    MOV	AX,	SEG INT _60        //取中断服务程序INT_60的段地址
    MOV	DS,	AX
    MOV	AH,	25H     //送功能号
    MOV	AL,	60H      //送中断类型号
    INT	21H              //DOS功能调用
    POP	DS               //恢复DS
    

    2)直接装入法
    用传送指令直接将中断服务程序入口地址置入中断向量表。
    设中断类型号为60H,此类型号对应的中断服务程序入口地址应存放在中断向量表00180H开始的四个连续存储单元中。
    采用直接装入的程序段如下:

    XOR	AX,	AX	//清零
    MOV	DS,	AX
    MOV	AX,	OFFSET INT_60
    MOV	DS:	[0180H],	AX      // 置中断服务程序INT_60的偏移地址
    MOV	AX,	SEG INT_60
    MOV	DS:	[0180H+2],	AX        //置中断服务程序INT_60的段地址

    接下来会对可编程中断控制器8259 A进行理解,请大家拭目以待!
    学习是对体系结构的一种建立,今天不会的不要慌,当体系结构达到一个水准之后,或许明天就会了呢?
    目之所及,皆是回忆!
    心之所想,皆是过往!
    眼之所看,皆是遗憾!

    展开全文
  • 中断处理程序

    千次阅读 2019-01-30 18:02:52
    引例 除法错误中断处理 assume ds:a ...我们执行完div bh,我们应该执行076a:0007的mov ax,0001,但是因为这个除法溢出,所以获取调用0号中断处理程序,即0000:0 ~0000:3 四个字节的内容,就是这个中断...

    引例

    除法错误中断处理

    assume ds:a
    a segment
    	mov ax,1000h
    	mov bh,1
    	div bh
    	mov ax,1h
    a ends
    end 

    上面源代码u查找的汇编指令
    在这里插入图片描述

    我们执行完div bh,我们应该执行076a:0007的mov ax,0001,但是因为这个除法溢出,所以获取调用0号中断处理程序,即0000:0 ~0000:3 四个字节的内容,就是这个中断处理程序的入口地址
    在这里插入图片描述
    验证0000:0 ~0000:3的内容
    在这里插入图片描述


    编写处理0号中断

    assume cs:code
    code segment 
    start: 
    	安装
    	设置中断向量表
    	mov ax,4c00h
    	int 21h
    	
    	改写的中断程序操作代码
    code ends
    end start
    1. 安装目的
      改写的中断程序操作代码的放入一段需要一块不会被其他程序占用的内存空间,也就是复制一份
    2. 设置中断向量表目的
      CPU可以找到该中断程序代码的入口地址,去执行
    3. 改写的中断程序操作代码
      这里就是要被安装上去的中断程序操作代码

    1. 安装代码

    我们的中断处理程序安装完毕后,防止在程序执行完退出被覆盖,我们也需要放入一个不被覆盖的内存空间,而这段内存空间,我们选用0:200处,虽然是向量中断表的,但是中断类型显然没有那么多,我们先使用这段空间

     mov ax,cs
     mov ds,ax
     mov si,offset InterruptHandler_0 ;设置ds:si 指向源地址
     mov ax,0
     mov es,ax
     mov di,200h ;设置es:di 指向目的地址
     mov cx,offset InterruptHandler_0end-offset InterruptHandler_0 ;设置次数,编译器计算两个标识的距离
     cld
     rep movsb

    ds:si 指向源地址 设置为cs:标识
    es:di 指向目的地址 设置为0:200h
    cx 设置传输次数即长度

    2. 改写中断处理程序:

    为了防止我们需要的显示的overflow,在程序执行完退出被覆盖,我们也需要放入一个不被覆盖的内存空间,我们同样也用到0:200的空间

    InterruptHandler_0: 
    	jmp short start0
    	db "overflow"
    start0: mov ax,cx
    	mov	ds,ax
    	mov si,202h       ;设置ds:si 指向源地址
    	mov	ax,0b800h
    	mov es,ax
    	mov di,12*160+36*2 ;设置es:di 指向目的地址
    	mov cx,9
    s:	mov al,[si]
    	mov es:[di],al
    	inc si
    	add di,2
    	loop s
    	mov ax,4c00h
    	int 21h
    InterruptHandler_0end: nop

    ds:si 指向源地址 设置为db "overflow”定义这些字符所在地址
    es:di 指向目的地址 设置为显存空间的中间位置
    cx 设置传输次数即长度

    3. 设置中断向量表代码

    mov ax,0
    mov es,ax
    mov word ptr es:[0*4],200h
    mov word ptr es:[0*4+2],0
    展开全文
  • 中断和中断处理程序

    千次阅读 2015-04-09 21:28:59
    处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一... 硬件设备生成中断的时候并不考虑与处理器的时钟同步——也就是说中断随时可以产生。内核随时可能因为新到来的中断
  • 中断机构和中断处理程序

    千次阅读 2018-12-29 18:06:32
    什么是中断? 中断实际上是对信号做出的一种反应, 即CPU对I/O设备发来的中断信号的一种反应。是由外部设备引起的。俗称外中断。 在此插一嘴什么是陷入?...中断处理程序位于I/O系统的底层,直接与硬件进行交...
  • 中断及中断处理过程

    万次阅读 多人点赞 2019-07-24 22:00:23
    Intel的官方文档里将中断和异常理解为两种中断当前程序执行的不同机制。这是中断和异常的共同点。 不同点在于: 中断(interrupt)是异步的事件,典型的比如由I/O设备触发;异常(exception)是同步的事件,典型的...
  • 缺页中断处理过程

    千次阅读 2018-11-15 11:24:54
    缺页中断处理过程
  • ARM中断处理过程

    千次阅读 2016-09-17 17:03:10
    ARM中断处理过程
  • 中断处理程序&中断服务例程

    千次阅读 2016-06-03 13:58:23
    中断处理程序(Interrupt Handler)和中断服务例程ISR(Inerrupt Service Routine)是两个不同的概念;一条中断线对应一个中断处理程序,而一个中断处理程序再对应若干个中断服务例程,如下: 所有的中断服务例程...
  • 8086中断处理程序分析

    千次阅读 2017-09-02 14:50:41
    中断处理程序的入口地址,即中断向量必须存储在对应的中断向量表表项中,通俗的讲就是中断处理程序的地址放在一块内存中,这块存储中断处理程序的入口的地址空间叫中断向量表,而实际地址就叫中断向量
  • x86中断处理过程

    千次阅读 2019-06-18 14:10:29
    文章目录了解x86中的中断源中断interrupts异常Exceptions了解CPU与操作系统如何处理中断x86如何通过中断处理来完成系统调用能够对中断向量表(中断描述表,简称IDT)进行初始化 了解x86中的中断源 中断、异常在具体...
  • 中断处理程序的设计

    千次阅读 2018-10-03 20:51:32
    在嵌入式系统的设计中,与外设...与数据收发相关的中断,中断处理程序与外部程序(操作系统和应用程序)之间的数据交换方式的设计是中断处理程序设计的一个关键部分,直接影响系统的工作效率,甚至是一些偶发性故障...
  • 第7章中断处理程序

    千次阅读 2018-09-17 20:40:11
    7.2 中断处理程序 在响应一个特定中断的时候...一个设备的中断处理程序是它设备驱动程序的一部分——设备驱动程序是用于对设备进行管理的内核代码。 在Linux中,中断处理程序是普通的C函数。只不过这些函数必须按...
  • 中断处理程序

    万次阅读 2011-11-19 11:20:55
    本章将深入到DOS系统内部探讨中断处理程序的内容。与其他计算机编程不一样,中断处理程序这个名词听起来就很难懂。用最简单的话来说,中断处理程序就是对应于中断激活的程序。  读者可能已发现,中断处理实际上并...
  • 计算机组成原理(中断处理过程

    千次阅读 多人点赞 2018-06-30 19:31:42
    中断处理过程 Created with Raphaël 2.1.2关中断保存断点,保存现场判别中断条件,转入中断服务程序开中断执行中断服务程序 关中断恢复现场,恢复断点开中断返回返回断点 关中断 进入不可再次响应中断的状态,...
  • 有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,这个过程就是中断嵌套 ...
  • 中断处理程序与中断服务例程

    千次阅读 2017-07-20 11:27:21
    1 什么是中断2中断处理程序3中断服务例程4request_irq函数分析 1. 什么是中断 简单来说中断就是硬件设备与处理器的一种交流方式,比如当我按下一个键时,只有当处理器知道我按下了这个键并且做出相应...
  • Linux内核之 中断以及中断处理程序

    千次阅读 2017-04-16 12:13:23
    人生若只如初见,何事秋风悲画扇。  --------纳兰容若 《木兰花令·拟古决绝词》 一、什么是中断:   linux管理所有的硬件设备,要做的第一...然而CPU的处理速度要远快于外围设备,总不能让CPU一直在等待外围设备
  • 中断的概念和中断处理过程

    千次阅读 2013-05-30 22:17:06
    中断的概念和中断处理过程 (1)中断: 在运行一个程序的过程中,断续地以“插入”方式执行一些完成特定处理功能的程序段,这种处理方式称为中断。 (2)中断的作用: ◎并行操作 ◎硬件故障报警与处理 ◎...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 464,486
精华内容 185,794
关键字:

中断处理过程可以怎么进行