精华内容
下载资源
问答
  • PIC单片机中断服务程序

    千次阅读 2017-08-03 20:48:55
    中断服务程序个特殊的定义方法: void interrupt ISR(void);其中的函数名“ISR”可以改成任意合法的字母或数字组合,但其入口参数和返回参数类型必须是“void”型,亦即没有入口参数和返回参数,且中间必须有...
    中断服务程序有一个特殊的定义方法: void interrupt ISR(void);其中的函数名“ISR”可以改成任意合法的字母或数字组合,但其入口参数和返回参数类型必须是“void”型,亦即没有入口参数和返回参数,且中间必须有一个关键词“interrupt”。
           中断函数可以被放置在原程序的任意位置。因为已有关键词“interrupt”声明,PICC 在最后进行代码连接时会自动将其定位到0x0004 中断入口处,实现中断服务响应。编译器也会实现中断函数的返回指令“retfie”。
     
            一个简单的中断服务示范函数如下:

    void interrupt ISR(void) //中断服务程序

    if (T0IE && T0IF)//判TMR0 中断

    {  

    T0IF = 0; //清除TMR0 中断标志 //在此加入TMR0 中断服务
      }

    if (TMR1IE && TMR1IF)//判TMR1 中断  T

    MR1IF = 0; //清除TMR1 中断标志
                     //在此加入TMR1 中断服务
            }
    } //中断结束并返回
     
    PICC 会自动加入代码实现中断现场的保护,并在中断结束时自动恢复现场,所以编程员无需像编写汇编程序那样加入中断现场保护和恢复的额外指令语句。
    但如果在中断服务程序中需要修改某些全局变量时,是否需要保护这些变量的初值将由编程员自己决定和实施。
    用C 语言编写中断服务程序必须遵循高效的原则:
    1. 代码尽量简短,中断服务强调的是一个“快”字。
    2.避免在中断内使用函数调用。虽然PICC 允许在中断里调用其它函数,但为了解决递归调用的问题,此函数必须为中断服务独家专用。既如此,不妨把原本要写在其它函数内的代码直接写在中断服务程序中。
    3.避免在中断内进行数学运算。数学运算将很有可能用到库函数和许多中间变量,就算不出现递归调用的问题,光在中断入口和出口处为了保护和恢复这些中间临时变量就需要大量的开销,严重影响中断服务的效率。
     
    中档系列PIC 单片机的中断入口只有一个,因此整个程序中只能有一个中断服务函数。
    展开全文
  • 程序调用和中断指令

    千次阅读 2007-05-20 17:25:00
    调用的时候ip或eip压栈将机器执行的当前值(即call指令的下一条指令的地址)压入堆栈以便子程序返回用。2.返回ret返回时ip出栈带参数的返回指令 ret NN是一个16位的常数(偶数),该指令是将返回地址弹入ip或eip后在...

    子程序的调用及返回指令

    1.调用call dst;
    调用的时候ip或eip压栈将机器执行的当前值(即call指令的下一条指令的地址)压入堆栈以便子程序返回用。
    2.返回ret
    返回时ip出栈
    带参数的返回指令 ret N
    N是一个16位的常数(偶数),该指令是将返回地址弹入ip或eip后在执行sp/esp+N -->sp/esp.
    该指令允许返回地址出栈后修改堆栈的指针,这便于调用子程序以前把子程序所需要的参数入栈,
    以便子程序运行时使用这些参数。当子程序返回后,这些参数已不再使用,就可以修改指针使其指向参数入栈
    以前的值。

    中断指令
    中断服务程序可以被认为是一种特殊的子程序,可以被存放在主存的任何位置。中断服务程序的首(起始、入口)地址,被安排在中断向量表中。
          中断向量表设置在主存的最低1KB区域内,物理地址000H ~ 3FFH。向量表从0开始,每4个字节(双字)对应一个中断,低字存放中断服务程序的偏移地址IP,高字存放其段地址CS。中断向量号n的中断服务程序存放在中断向量表4×n的物理地址处。
          中断时,为保证中断服务程序正确返回原来的程序,要把被中断程序的断点处逻辑地址CS : IP压入堆栈保存,还要保存反映现场状态的标志寄存器FLAGS。然后,将中断服务程序的入口地址送CS和IP寄存器转去执行中断服务程序。
          中断服务程序执行完后返回原程序时,应恢复堆栈中保存的断点地址CS : IP,以及标志寄存器。中断返回指令IRET实现从中断服务程序返回原程序
      1. int n   ;产生中断类型为n的中断
      2. into;溢出中断指令
      3. iret;中断返回指令 相关内容要出栈


    int 21h;系统功能调用指令
    通过用int 21h;再调用每个功能事先规定的功能号,就可以进入相应的中断服务程序入口。

    如何使用21号中断?
    答:把功能调用编号置于寄存器AH中,设置入口参数,cpu执行int 21h,最后给出出口参数。
    举例:
    mov ah,1;功能号01h->ah
    int 21h;调用21h号软中断
    功能:等待键盘输入,并回送显示器。

    mov dl,41h;       将字符A的ASCII码,送->DL
    mov ah,2;         21h的2软中断,将dl内容显示到屏幕上
    int 21h

    mov ah,4ch;
    int 21h;  功能号4ch终止程序,返回dos

     

    展开全文
  • 中断指令

    2019-12-21 11:08:35
    中断指令并不是指令系统中的一条真正的指令,它没有操作码,所以中断指令是一种不允许、也不可能为用户使用的特殊指令。其所完成的操作主要有: (1)保存断点 为了保证在中断服务程序执行完毕能正确返回原来的...

    中断隐指令指CPU响应中断之后,经过某些操作,转去执行中断服务程序的一种操作。
    中断隐指令并不是指令系统中的一条真正的指令,它没有操作码,所以中断隐指令是一种不允许、也不可能为用户使用的特殊指令。其所完成的操作主要有:
    (1)保存断点
    为了保证在中断服务程序执行完毕能正确返回原来的程序,必须将原来程序的断点(即程序计数器(PC)的内容)保存起来。断点可以压入堆栈,也可以存入主存的特定单元中。
    (2)暂不允许中断
    暂不允许中断即关中断。在中断服务程序中,为了保护中断现场(即CPU主要寄存器的内容)期间不被新的中断所打断,必须要关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确地执行下去。
    并不是所有的计算机都在中断隐指令中由硬件自动地关中断,也有些计算机的这一操作是由软件(中断服务程序)来实现的。中断服务程序一般用来保存通用寄存器和状态寄存器的内容。
    (3)引出中断服务程序
    引出中断服务程序的实质就是取出中断服务程序的入口地址送程序计数器(PC)。对于向量中断和非向量中断,因此中断服务程序的方法是不相同的。

    展开全文
  • 完整的中断处理过程分为 1)中断响应的事前准备: 系统要想能够应对各种不同的中断信号,总的来看就是...CPU在执行完当前程序的每一条指令后,都会去确认在执行刚才的指令过程中中断控制器(如:8259A)是否发送中断...

    完整的中断处理过程分为

    1)中断响应的事前准备:

    系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的。系统只有事前对这两件事都知道得很清楚,才能正确地响应各种中断信号和异常。

    2) CPU检查是否有中断/异常信号

    CPU在执行完当前程序的每一条指令后,都会去确认在执行刚才的指令过程中中断控制器(如:8259A)是否发送中断请求过来,如果有那么CPU就会在相应的时钟脉冲到来时从总线上读取中断请求对应的中断向量。

    对于异常和系统调用那样的软中断,因为中断向量是直接给出的,所以和通过IRQ(中断请求)线发送的硬件中断请求不同,不会再专门去取其对应的中断向量。

    3) 根据中断向量到IDT表中取得处理这个向量的中断程序的段选择符

    CPU根据得到的中断向量到IDT表里找到该向量对应的中断描述符,中断描述符里保存着中断服务程序的段选择符。

    4) 根据取得的段选择符到GDT中找相应的段描述符

    CPU使用IDT查到的中断服务程序的段选择符从GDT中取得相应的段描述符,段描述符里保存了中断服务程序的段基址和属性信息,此时CPU就得到了中断服务程序的起始地址。

    5) CPU根据特权级的判断设定即将运行的中断服务程序要使用的栈的地址

    CPU会根据CPL和中断服务程序段描述符的DPL信息确认是否发生了特权级的转换,比如当前程序正运行在用户态,而中断程序是运行在内核态的,则意味着发生了特权级的转换,这时CPU会从当前程序的TSS信息(该信息在内存中的首地址存在TR寄存器中)里取得该程序的内核栈地址。

    6) 保护当前程序的现场

    CPU开始利用栈保护被暂停执行的程序的现场:依次压入当前程序使用的eflags,cs,eip,errorCode(如果是有错误码的异常)信息。

    7) 跳转到中断服务程序的第一条指令开始执行

    CPU利用中断服务程序的段描述符将其第一条指令的地址加载到cs和eip寄存器中,开始执行中断服务程序。这意味着先前的程序被暂停执行,中断服务程序正式开始工作。

    8) 中断服务程序处理完毕,恢复执行先前中断的程序

    在每个中断服务程序的最后,必须有中断完成返回先前程序的指令,这就是iret(或iretd)。程序执行这条返回指令时,会从栈里弹出先前保存的被暂停程序的现场信息,即eflags,cs,eip重新开始执行。

    中断服务程序流程

    保护现场

    保护现场有两个含义,其一是保存程序的断点;其二是保存通用寄存器和状态寄存器的内
    容。前者由中断隐指令完成(详见8.4.4节),后者由中断服务程序完成。具体而言,可在中断
    服务程序的起始部分安排若干条存数指令,将寄存器的内容存至存储器中保存,或用进栈指令
    (PUSH)将各寄存器的内容推入堆栈保存,即将程序中断时的“现场”保存起来。

    2.中断服务(设备服务)

    这是中断服务程序的主体部分,对于不同的中断请求源,其中断服务操作内容是不同的,例
    如,打印机要求CPU将需打印的一行字符代码,通过接口送人打印机的缓冲存储器中(参见图
    573)以仕打印机打印又如,显示设各要求CPU将需显示的一屏字符代码通过接口送人显示
    5.23)以供打印机打印。又如,显示设备要求CPU将需显示的一屏字符代码通过接口送入显示
    器的显示存储器中(参见图5.18)。

    3.恢复现场

    这是中断服务程序的结尾部分,要求在退出服务程序前,将原程序中断时的“现场”恢复至
    原来的寄存器中。通常可用取数指令或出栈指令(POP),将保存在存储器(或堆栈)中的信息这
    回到原来的寄存器中。

    4.中断返回

    中断服务程序的最后一条指令通常是–条中断返回指令,使其返回到原程序的断点处,以信
    继续执行原程序。
    计算机在处理中断的过程中,有可能出现新的中断请求,此时如果CPU暂停现行的中断月
    务程序,转去处理新的中断请求,这种现象称为中断嵌套,或多重中断。倘若CPU在执行中断月
    务程序时,对新的中断请求不予理睬,这种中断称为单重中断。这两种处理方式的中断服务程戶
    略有区别。图5.43(a)和图5.43(b)分别为单重中断和多重中断服务程序流程。比较图5.4
    ()和图5.43(h)可以发现.其区别在千“开中断”的设置时间不同。

    展开全文
  • 程序中断

    千次阅读 2016-08-30 17:02:28
    因此,有多个中断源,但是,CPU某时刻只接受中断源。那么其他的中断源怎么办? 老办法:排队等候啊。 如何选择中断源?也是老办法,谁优先级高就选谁。正在处理中断呢,能不能被打断? 答案是可以的,...
  • 在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。  中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在这里就不讲了,首先来回忆下中断系统涉及到哪些问题。  (1)...
  • 关于ARM的中断服务程序

    千次阅读 2012-12-22 20:06:17
    就对这个东西抽丝剥茧,看清楚这究竟是个怎么样的过程。  中断向量   b HandlerIRQ ;handler for IRQ interrupt  很自然,因为所有的单片机都是那样,中断向量一般放在开头,用过单片机的人都会很熟悉...
  • zynq中中断程序分析

    万次阅读 多人点赞 2016-08-14 21:10:10
    本文通过分析个中断例程来了解zynq中断执行过程 基础知识ARM体系架构的处理器中...跳转到中断向量地址执行,从而跳转到相应的中断程序中执行 执行中断处理函数内容 恢复被屏蔽的中断屏蔽位 返回到被中断指令的下
  • 中断返回指令

    千次阅读 2009-05-02 09:30:00
    为了实现此项功能,指令系统提供了一条专用的中断返回指令。该指令的格式如下: IRET/IRETD 该指令执行的过程基本上是INT指令的逆过程,具体如下: ◆、从栈顶弹出内容送入IP; ◆、再从新栈顶弹出内容送入CS; ◆、...
  • 操作系统-中断指令

    千次阅读 2018-02-12 00:36:03
    中断指令并不是指令系统中的一条真正的指令,它没有操作码,所以中断指令是一种不允许、也不可能为用户使用的特殊指令。其所完成的操作主要有: (1)保存断点 为了保证在中断服务程序执行完毕能正确返回原来的...
  • 中断服务程序是如何被执行的 ?

    千次阅读 2020-05-25 00:07:18
    笔者在 《程序是如何在 CPU 中运行的(二)》中从 PC 指针寄存器的角度分析了级函数调用和二级函数调用执行的过程,那么中断服务程序又是如何被执行的呢?两者的相同点和不同点是什么呢?该篇文章笔者将详细地阐述...
  • 1.5.3 访管指令与访管中断

    万次阅读 多人点赞 2016-06-19 22:57:22
    访管指令一条可以在用户态下执行的指令。在用户程序中,因要求操作系统提供服务而有意识地使用访管指令,从而产生一个中断事件(自愿中断),将操作系统转换为核心态,称为访管中断。访管中断由访管指令产生,...
  • 程序调用和中断的几个概念

    千次阅读 2015-10-10 15:54:01
    一个程序在执行的过程中去执行另一个程序,我们称之为中断程序中断时的下一条指令的地址称为程序的断口地址。 保护现场和恢复现场。如果主程序中断时,有些寄存器还存放着中间结果,而子程序很有可能要占用这些...
  • ARM 软中断指令SWI

    万次阅读 多人点赞 2016-03-01 22:35:40
    前面我们学习ARM工作模式中,处理器模式切换可以通过软件控制进行切换...于是ARM指令集中提供了两条产生异常的指令,通过这两条指令可以用软件的方法实现异常,其中个就是中断指令SWI 。   、软件中断  软中
  • 8086中断处理程序分析

    千次阅读 2017-09-02 14:50:41
    中断程序介绍, 中断处理程序:由于cpu随时检测程序的中断信息,也就是执行中断程序,所以中断程序必须存储在内存某个段空间中 而中断处理程序的入口地址,即中断向量必须存储在对应的中断向量表表项中,通俗的讲...
  •   STM32系列芯片(Cortex-M3)有三级流水线,指令周期不定,ARM给出的Cortex-M3核单片机的平均执行速度是1.25MIPS/Mhz。   MIPS的全称是Million Instructions Per Second,每秒百万指令(西方或者国际上的计量...
  • 7.4.2 程序中断方式

    千次阅读 2016-09-22 17:21:05
    程序中断是指在计算机执行现行程序的过场中,出现某些急需处理的异常情况或特殊请求,CPU暂停中断现行程序,而专区对这些异常情况或特殊情况进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序...
  • 各种Arduino外部中断程序

    万次阅读 2017-02-12 14:57:08
    CPU执行时原本是按程序指令一条一条向下顺序执行的。 但如果此时发生了某一事件B请求CPU迅速去处理(中断发生),CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务). 待CPU将事件B处理完毕后, 再回到原来...
  • 汇编语言----中断指令

    千次阅读 2017-01-01 17:21:13
    中断是输入/输出程序中常用的控制方式,是指计算机暂停当前正在执行的程序而转去执行处理某事件的中断服务程序.当中断服务程序执行完毕,再恢复执行被暂时停止的程序 (1)中断指令  格式 : INT n  功能 : 产生个...
  • I/O方式 —— 程序中断方式

    千次阅读 多人点赞 2019-09-01 12:06:01
    、工作流程 中断请求:中断源向CPU发送中断请求信号。 中断判优:多个中断源同时提出请求时,通过中断判优逻辑响应中断源。 中断响应及中断隐指令。...软件中断:通过某条指令产生的中断,...
  • 中断时计算机科学中最基本、也是十分重要的个概念...定义:中断就是使CPU暂时挂起当前正在进行的工作并转向某紧急事件的服务与处理程序(该服务与处理程序称为中断服务程序),在执行完中断服务程序后再返回到被中止
  • BIOS提供的08H号中断处理程序中有一条中断指令“INT 1CH”。所以每秒要调用1000/55≈18.2次1CH号中断处理程序。 ;而BIOS的1CH号中断处理程序实际上并没有执行任何工作,只有一条中断返回指令(IRET) ;这样安排的...
  • 中断处理程序

    万次阅读 2011-11-19 11:20:55
    本章将深入到DOS系统内部探讨中断处理程序的内容。与其他计算机编程不一样,中断处理程序这个名词听起来就很难懂。用最简单的话来说,中断处理程序就是对应于中断激活的程序。  读者可能已发现,中断处理实际上并...
  • 8086系统在存储器的最低1KB区域(00000H~003FFH)...在执行某一条INT n指令时,CPU首先对断点和现场进行保护,然后将中断指令中的中断类型号n乘以4,得到一个地址,这个地址就是n号中断服务程序的入口地址在中断向量
  • 中断隐指令:在中断响应中计算机会去做三件事,这三件事没有任何一条指令控制,都是自动去做的,所以叫中断隐指令。 具体做1.硬件关中断 2.保护断点 3.向中断服务程序的入口跳转。
  • ARM的中断向量表,及DCD伪指令

    千次阅读 2016-08-06 01:10:08
    在32位ARM系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中 断服务例程的功能。例如:  IRQEntry B HandleIRQ ;跳转范围较小  LDR PC,=HandleFIQ  ;LDR伪指令等效生成1条...
  • 中断中断处理程序

    千次阅读 2009-06-07 12:32:00
    1. 中断 Linux内核要对连接到计算机上的所有硬件设备进行管理,首先要能和它们互相通信。从所周知,处理器的速度跟外围硬件设备的速度往往不在个数量级上。所以,需要种机制,如果轮询(polling)是种解决办法...
  • 指令指针寄存器IP:存放下一条指令的地址的偏移量 (下一条指令的地址,CS给出段基值+ip偏移地址,20位的物理地址) 标志寄存器FR:存放当前程序执行的状态,相加以后结果为0,溢出,符号位为正为负等。指令指针IP...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,078
精华内容 40,031
关键字:

中断服务程序的最后一条指令