精华内容
下载资源
问答
  • 中断子程序的返回指令是
    千次阅读
    2021-07-14 01:30:28

    一、主体不同

    1、调用中断服务程序:可理解为是一种服务,是通过执行事先编好的某个特定的程序来完成的。

    2、调用子程序:是指调用子程序的指令,包括调用指令(转子指令)和返回指令(返主指令)。

    二、特点不同

    1、调用中断服务程序:当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作。

    2、调用子程序:子程序调用指令用于实现程序与程序之间的转移,与转移指令不同(转移指令用于实现同一程序内的转移)。子程序调用指令还可以进行嵌套调用,即可调用别的子程序,还可以实现递归调用。

    1e94f7ca13f925ed58589156cc56b238.png

    三、方式不同

    1、调用中断服务程序:保护被中断进程现场。为了在中断处理结束后能够使进程准确地返回到中断点,系统必须保存当前处理机程序状态字PSW和程序计数器PC等的值。

    2、调用子程序:把常用的程序段编写成独立的子程序或过程,在需要时随时调用,调用子程序需要用到调用指令。

    参考资料来源:百度百科-子程序调用指令

    参考资料来源:百度百科-中断服务程序

    更多相关内容
  • 中断服务程序与普通子程序有什么根本的区别? 答:中断服务程序是随机发生的,结束后要返回断点。普通子程序是安排好的,没有断点。
  • 前言笔者在 《程序是如何在 CPU 中运行的(二)》中从 PC 指针寄存器的角度分析了一级函数调用和二级函数调用执行的过程,那么中断服务子程序又是如何被执行的呢?两者的相同点和不同点是什么呢?该篇文章笔者将详细地...

    前言

    笔者在 《程序是如何在 CPU 中运行的(二)》中从 PC 指针寄存器的角度分析了一级函数调用和二级函数调用执行的过程,那么中断服务子程序又是如何被执行的呢?两者的相同点和不同点是什么呢?该篇文章笔者将详细地阐述这个概念。

    中断的概念

    当 CPU 正在处理某件事情的时候,外部发生的某一事件请求 CPU 迅速去处理,于是,CPU 暂时中止当前的工作,转去处理所发生的事件。中断服务处理完该事件以后,再回到原来被中止的地方,继续原来的工作,这样的过程称之为中断,示意图如下:

    195249593_1_20200710015203364

    中断响应及处理过程

    回顾函数调用的过程,子程序由主程序进行调用,从而完成执行。但是中断服务子程序并没有被主程序进行调用,中断服务子程序的执行是通过中断请求完成的,也就是说中断服务子程序可以发生在主程序执行的随意位置,那现在就面临一个问题了,如果当CPU 正在执行函数调用的子程序的内容的时候产生了一个中断请求,那么这个时候 CPU 将暂停执行函数调用的子程序的内容,转而去执行中断服务子程序的内容,如果不进行额外的处理,那么函数调用的子程序的相关数据将丢失,因此在执行中断服务子程序之前,CPU 必须要保存发生中断的那个地方的相关信息,这个操作用专业的术语来讲就是保护现场,保护现场之后,CPU 将执行中断服务子程序的内容,执行完中断服务子程序的内容之后,CPU 要回到刚刚暂停的地方继续执行,另外在返回之前,CPU 还要进行恢复现场,恢复现场之后,就可以返回到暂停的地方继续执行了,下面是整个过程的示意图:

    195249593_2_20200710015203505

    通过上述示意图我们也可以看到在返回地址这个地方,中断服务子程序和函数调用子程序的返回地址所遵循的原理是一样的,函数调用子程序的返回地址是函数调用指令的下一条指令的地址,而在上述示意图中的 N 和 N 1 的含义也是类似的,当 CPU 执行到第 N 条指令的时候,CPU 接收到了一个中断请求,在执行完第 N 条指令之后,转而去执行中断服务子程序的内容,然后中断服务子程序的返回地址对应的是第 N 1 条指令的地址。

    中断的堆栈占用

    在刚刚所述的内容中,说到 CPU 在执行中断服务子程序的内容之前,需要保护现场,那保护现场这个操作具体是怎么实现的呢?这个时候,就要用到我们的堆栈了。在这里拿 ARM Cortex M3 举例,在响应中断时所做的第一个操作就是保护现场,它会依次把 xPSR,PC,LR,R12以及 R3-R0 由硬件自动压入适当的堆栈中,注意,这里是自动压入堆栈,也就是说如果我们看对应的汇编代码是看不到这部分压栈操作的。另外,我们知道对于 ARM Cortex M3 的堆栈来说,它存在两个,一个是主堆栈指针(MSP),一个是线程堆栈指针(PSP),其中主堆栈指针是复位后默认使用的堆栈指针,用于操作系统内核和中断处理程序,线程堆栈指针(PSP)是由用户的应用程序代码所使用。那么在执行现场保护时将相关寄存器的值压入堆栈,应该使用哪个堆栈指针呢?这也是存在一个原则的,如果在响应中断时,当前的代码正在使用线程堆栈指针(PSP),那么将使用线程堆栈指针(PSP)进行压栈,否则将使用主堆栈指针(MSP)。另外在 CPU 进入中断服务子程序之后,所涉及的堆栈操作所使用的堆栈一直是主堆栈指针(MSP)。为了更直观的展示这个过程,下图是发生中断请求后,堆栈的变化示意图:

    195249593_3_20200710015203552

    通过上图我们可以很清楚地看到在响应中断时产生的保护现场操作,堆栈明显增长了,而在执行完中断服务子程序的内容之后,又将执行恢复现场的操作,这个时候堆栈的内容又减少了。

    为了更清楚地展示压入堆栈寄存器的操作,笔者在这里也给出上述图中堆栈粉色部分的详细内容,图片如下:

    195249593_4_20200710015203646

    上述就是保护现场时所压入堆栈的相关寄存器,另外还需注意的一点是当所涉及的中断服务子程序逻辑比较复杂的时候,就需要更多的寄存器了,这个时候就需要用到 R4-R11 了,但是这部分寄存器是不能进行自动压栈的,也就是说如果在中断服务子程序中使用到这部分寄存器的时候就需要进行手动压栈,那么这部分的压栈操作在汇编层面就能看到了。

    中断向量表

    在上述所阐述的内容中,我们知道了中断会在主程序的任意发生中断请求,从而执行中断服务子程序的内容,也阐述了在执行中断服务子程序的内容之前需要进行保护现场的操作,以及执行完中断服务子程序的内容之后需要进行恢复现场。现在我们再来思考,在 CPU 中,中断源不止一种,可以是按键按下所触发的一个外部中断,也可能是在使用串行通信时,收到数据所触发的一个中断,亦或者在 CPU 中定义的一个定时中断由于设置的时间到了而触发的定时中断,这个时候,就浮现一个问题了,要如何将这一个一个的中断源与其各自的中断服务子程序所一一对应起来呢?换句更为通俗的话来讲就是当 CPU 接收到一个中断信号时,CPU 将如何找到对应的中断服务子程序进行执行呢?这个时候,就需要中断向量表了,下面是中断向量表的特点:

    中断向量表在 CPU 中是一段连续的存储空间

    中断向量表在 CPU 复位后有默认的起始地址

    每一个中断在中断向量表中都有对应的表项,该表项的值为该中断源对应的中断服务程序的地址

    由程序代码确定中断向量表中的每个表项

    上述特点说中断向量表都存在默认的起始地址,在这里依旧拿 ARM Cortex M3 内核来看,它的中断向量表默认的起始地址是从地址 0x0000 0000 开始的,如下图所示:

    195249593_5_20200710015203724

    当然这只是一部分,并不是全部的表项。有了中断向量表之后,那么当 CPU 接收到中断请求的时候,就会根据这个中断请求的信号去查这个表,从而查找到其所对应的中断服务子程序的地址,然后将这个地址赋值给 PC 指针寄存器就,那么 CPU 就可以完成中断服务子程序的执行了,对于 PC 指针寄存器不是太清楚地朋友可以看笔者的这篇文章 《程序是如何在 CPU 中运行的(二)》。

    中断服务函数的写法

    中断服务函数的写法不同的 CPU 有各自不同的写法,对于 ARM Cortex M3 的 CPU 来说,因为其内核的特点,在执行完中断服务函数后的返回指令与普通函数调用的返回指令是一样的,因此中断服务函数的写法与 C 语言中普通函数的定义没有区别,比如下面是 STM32F103 的一个外部中断的服务函数

    void EXTI0_IRQHandler(void)

    {

    /* 确保是否产生了中断 */

    if(EXTI_GetITStatus(EXTI_Line0) != RESET)

    {

    /*用户代码*/

    /*清除中断标志位*/

    EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);

    }

    }1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    通过上述的代码我们可以看到中断服务函数的另一个特点,就是它的返回值和形参都为 void ,这也是由原因的,因为中断服务函数本来就不是由主程序进行调用的,既然中断服务函数不会被其他函数所调用,那么其返回值和形参自然是 void 了。

    上述说到是因为 ARM Cortex M3 的 CPU 在处理中断服务函数的返回地址时用的指令和普通函数调用时的返回地址的指令一致,所以才能够使中断服务函数的写法与普通 C 语言函数没有差异,下面举一个 51 单片机的定时器中断服务函数的例子:

    void InterruptTimer0() interrupt 1

    {

    /*省略*/

    }1

    2

    3

    4

    上述的这个中断服务函数, InterruptTimer0可以任意起,但是括号后面的是有严格规定的,为了 51 单片机能够进行中断处理,C51 编译器对函数进行了扩展,增加了一个扩展关键字interrupt,从而让 CPU 知道这个是一个中断服务函数。

    中断的嵌套

    C 语言函数能够进行嵌套调用,同样的中断服务函数也能够进行嵌套,同样的用一张图来表明中断的嵌套:

    195249593_6_20200710015203880

    可以看到中断的嵌套也是在消耗堆栈的,和使用函数嵌套调用一个道理,这里需要注意的是中断是存在优先级的,如果发生了一个比当前执行的中断优先级低的中断请求,那么新产生的中断请求会等待正在执行的中断执行完成之后才开始响应新的中断,如果产生的中断的优先级比当前的优先级要高,那么也就会像上图所示一样进行执行。另外需要注意的是,中断的优先级是有限的,也就是说中断嵌套的层数是有限的,如果再考虑堆栈溢出的话,那么中断嵌套的层数还和堆栈的大小有关。

    总结

    上述就是关于中断的相关内容,简单地叙述了中断是如何响应的,如何执行保护现场和恢复现场的操作,CPU 如何根据中断向量表找到对应的中断服务函数,以及中断的嵌套,这就是这次分享的全部内容啦~

    展开全文
  • 中断指当出现中断信号时,控制系统暂时停止执行当前的程序,转而执行处理新情况的程序,执行完毕 后,再返回程序继续执行。
  • 51单片机中断服务子程序的设计

    千次阅读 2021-05-24 01:14:09
    中断系统的运行必须与中断服务子程序配合才能正确使用。设计中断服务子程序需要首先明确以下几个问题。中断服务子程序设计的任务中断服务子程序设计的基本任务有下列4条:(1)设置中断允许控制寄存器IE,允许相应的...

    中断系统的运行必须与中断服务子程序配合才能正确使用。设计中断服务子程序需要首先明确以下几个问题。

    中断服务子程序设计的任务

    中断服务子程序设计的基本任务有下列4条:

    (1)设置中断允许控制寄存器IE,允许相应的中断请求源中断。

    (2)设置中断优先级寄存器IP,确定并分配所使用的中断源的优先级。

    (3)若是外部中断源,还要设置中断请求的触发方式IT1或IT0,以决定采用电平触发方式还是跳沿触发方式。

    (4)编写中断服务子程序,处理中断请求。

    前3条一般放在主程序的初始化程序段中。

    举例如下:例1、假设允许外部中断0中断,并设定它为高优先级中断,其他中断源为低优先级中断,采用跳沿触发方式。在主程序中可编写如下初始化程序段:

    7905144d0e018b50da744961858a0a3c.png

    采用中断时的主程序结构

    由于各中断人口地址是固定的,而程序又必须先从主程序起始地址OOOOH执行。所以,在OOOOH起始地址的几个字节中,要用无条件转移指令,跳转到主程序。另外,各中断人口地址之间依次相差8字节,中断服务子程序稍长就超过8字节,这样中断服务子程序就占用了其他的中断入口地址,影响其他中断源的中断处理。为此,一般在进入中断后,利用一条无条件转移指令,把中断服务子程序跳转到远离其他中断入口的人口地址处。

    常用的主程序结构如下:

    29b9b830001a94d602183f4b28434fe6.png

    注意:在以上的主程序结构中,如果有多个中断源,就对应有多个“ORG XlX2X3X4H”的中断入口地址,多个“中断入口地址”必须依次由小到大排列。主程序MAIN的起始地址Y1Y2Y3 Y4H根据具体情况来安排。

    中断服务子程序的流程

    AT89S51响应中断后,就进入中断服务子程序。中断服务子程序的基本流程如右图所示。

    e3351b8d51466379c555b31e4e35670e.png

    下面对有关中断服务子程序执行过程中的一些问题进行说明。

    (1)现场保护和现场恢复 所谓现场是指进人中断时,单片机中某些寄存器和存储器单元中的数据或状态。为了使中断服务子程序的执行不破坏这些数据或状态,以免在中断返回后影响主程序的运行,因此要把它们送入堆栈保存起来,这就是现场保护。

    现场保护一定要位于现场中断处理程序的前面。中断处理结束后,在返回主程序前,则需要把保存的现场内容从堆栈中弹出,以恢复那些寄存器和存储器单元中的原有内容,这就是现场恢复。

    现场恢复一定要位于中断处理的后面。AT89S51的堆栈操作指令“PUSH direct”和“POP direct”,主要是供现场保护和现场恢复使用的。至于要保护哪些内容,应该由用户根据中断处理程序的具体情况来决定。

    (2)关中断和开中断 右图中现场保护前和现场恢复前关中断是为了防止此时有高一级的中断进入,避免现场被破坏;在现场保护和现场恢复之后的开中断是为下一次的中断做好准备,也为了允许有更高级的中断进入。这样做的结果是,中断处理可以被打断,但原来的现场保护和现场恢复不允许更改,除了现场保护和现场恢复的片刻外,仍然保持着中断嵌套的功能。

    但有的时候,对于一个重要的中断,必须执行完毕,不允许被其他的中断嵌套。对此可在现场保护之前先关闭总中断开关位,彻底关闭其他中断请求,待中断处理完毕后再开总中断开关位中断。这样,就需要把图5-9中的“中断处理”步骤前后的“开中断”和“关中断”两个过程去掉。

    (3)中断处理 中断处理是中断源请求中断的具体目的。应用设计者应根据任务的具体要求来编写中断处理部分的程序。

    (4)中断返回 中断服务子程序的最后一条指令必须是返回指令RETI,它是中断服务程序结束的标志。CPU执行完这条指令后,把响应中断时所置l的不可寻址的优先级状态触发器清O,然后从堆栈中弹出栈顶上的两个字节的断点地址送到程序计数器PC,弹出的第一个字节送入PCH,弹出的第二个字节送入PCL,CPU从断点处重新执行被中断的主程序。

    例2、根据下图的中断服务子程序流程,编写中断服务程序。假设现场保护只需要将PSW寄存器和累加器A的内容压人堆栈中保护起来。

    一个典型的中断服务子程序如下:

    a56ca30cf5cd832943cb76637a8e179b.png

    上述程序有几点需要说明:

    (1)本例的现场保护假设仅仅涉及PSW和A的内容,如果还有其他需要保护的内容,只需要在相应的位置再加几条PUSH和POP指令即可。注意,对堆栈的操作是先进后出,次序不可颠倒。

    (2)中断服务子程序中的“中断处理程序段”,应用设计者应根据中断任务的具体要求来编写这部分中断处理程序。

    (3)如果该中断服务子程序不允许被其他中断所中断,可将“中断处理程序段”前后的“SETB EA”和“CLR EA”两条指令去掉。

    (4)中断服务子程序的最后一条指令必须是返回指令RETI,千万不可缺少,它是中断服务子程序结束的标志。CPU执行完这条指令后,返回断点处,重新执行被中断的主程序。

    展开全文
  • 中断服务子程序的主程序结构;中断服务子程序的流程

    • 中断系统的运行必须与中断服务子程序配合才能正确使用。设计中断服务子程序需要首先明确以下几个问题。

    1.中断服务子程序设计的任务

    • 任务有下列4条:
      (1)设置中断允许控制寄存器IE,允许相应的中断请求源中断。
      (2)设置中断优先级寄存器IP,确定所使用的中断源的优先级。
      (3)若是外部中断源,还要设置中断请求的触发方式决定采用电平触发方式还是跳沿触发方式。
      (4)编写中断服务子程序,处理中断请求。
    • 前3条一般放在主程序的初始化程序段中。

    【例4-3】

    • 假设允许外部中断0中断,设定为高级中断,采用跳沿触发方式,其他中断源为低级中断。初始化程序如下:
    	SETB    EA	;EA 位置1,总中断开关位开放
    	SETB    EX0	;EX0位置1,允许外部中断0产生中断
    	SETB    PX0	;PX0位置1,外部中断0为高优先级中断
    	SETB    IT0 ;IT0位置1,外部中断0为跳沿触发方式
    

    2.采用中断时的主程序结构

    • 程序必须先从主程序起始地址0000H执行。所以,在0000H起始地址的几个字节中,用无条件转移指令,跳向主程序
    • 另外,各中断入口地址之间依次相差8字节,中断服务子程序稍长就超过8字节,这样中断服务子程序就占用了其他的中断入口地址,影响其他中断源的中断处理。为此,一般在进入中断后,用一条无条件转移指令,把中断服务子程序跳转到远离其他中断入口的入口地址处。
    • 常用的主程序结构如下:
    • 注意:如果有多个中断源,就有多个“ORG X1X2X3X4H”的入口地址,多个“中断入口地址”必须依次由小到大排列。主程序MAIN的起始地址Y1Y2Y3Y4H,根据具体情况来安排。

    3.中断服务子程序的流程

    • 中断服务子程序的基本流程如图4-10所示。下面对有关中断服务子程序执行过程中的一些问题进行说明。
    图4-10 中断子服务程序的基本流程

    (1)现场保护和现场恢复

    • 现场是指单片机中某些寄存器和存储器单元中的数据或状态。为使中断服务子程序的执行不破坏这些数据或状态,因此要送入堆栈保存起来,这就是现场保护
    • 现场保护一定要位于中断处理程序的前面。中断处理结束后,在返回主程序前,则需要把保存的现场内容从堆栈中弹出恢复原有内容,这就是现场恢复
    • 现场恢复一定要位于中断处理的后面
    • 堆栈操作指令:“PUSH direct”和“POP direct”,是供现场保护和现场恢复使用的。要保护哪些内容,应根据具体情况来定。

    (2)关中断和开中断

    • 现场保护前现场恢复前关中断,是为防止此时有高一级的中断进入,避免现场被破坏。
    • 在现场保护和现场恢复之后的开中断是为下一次的中断做好准备,也为了允许有更高级的中断进入。这样,中断处理可以被打断,但原来的现场保护和现场恢复不允许更改,除了现场保护和现场恢复的片刻外,仍然保持着中断嵌套的功能。
    • 但有时候,一个重要的中断,必须执行完毕,不允许被其他的中断嵌套 。 可在现场保护前先关闭总中断开关位,待中断处理完毕后再开总中断开关位。这样,需把图4-10中的“中断处理”步骤前后的“开中断”和“关中断” 去掉。

    (3)中断处理

    • 应用设计者根据任务的具体要求,来编写中断处理部分的程序。

    (4)中断返回

    • 中断服务子程序最后一条指令必须是返回指令RETI。(后面这些硬件自动完成→)CPU执行完这条指令后,把响应中断时所置1的不可寻址的优先级状态触发器清0,然后从堆栈中弹出栈顶上的两个字节的断点地址送到程序计数器PC,弹出的第一个字节送入PCH,弹出的第二个字节送入PCL,从断点处重新执行主程序。

    【例4-4】

    • 根据图4-10流程,编写中断服务程序。设现场保护只将PSW寄存器和累加器A的内容压入堆栈中保护。一个典型的中断服务子程序如下:
    • 上述程序几点说明:

    (1)本例的现场保护假设仅仅涉及PSW和A的内容,如有其他需要保护的内容,只需在相应位置再加几条PUSH和POP指令即可。注意,堆栈的操作是先进后出。

    (2) “中断处理程序段”,设计者应根据中断任务的具体要求,来编写中断处理程序。

    (3)如果不允许被其他的中断所中断,可将“中断处理程序段”前后的“SETB EA”和“CLR EA”两条指令去掉。

    (4)最后一条指令必须是返回指令RETI,不可缺少,CPU执行完这条指令后,返回断点处,重新执行被中断的主程序。

    展开全文
  • 目录前言回顾一 中断1 中断响应以及处理过程2 中断堆栈的占用3 中断向量表4 中断服务函数5 (#4==#5) 其实和这个函数是一样的 前言回顾 回顾 《程序如何在cpu中运行的》 举例了几个例子 我们回顾一下 1 顺序执行时 ...
  • 第八章子程序中断调用.ppt

    千次阅读 2021-05-26 00:33:44
    第八章子程序与中断调用8.3 子程序与主程序间的参数传递 用高级语言实现的程序,其主程序与子程序之间的参数传递方法是由编译系统来规定的。...主程序有段内调用(NEAR)和段间调用(FAR),子程序返回对应有段内返回和段...
  • 1、两过程定义与作用子程序是微机基本程序结构中的1种,基本程序结构包括顺序(简单)、分支(判断)、...一般微机首先执行主程序,碰到调用指令就转去执行子程序子程序执行完后,返回指令就返回主程序断点(即调用指...
  • 程序是一组可以公用的指令序列,只要给出子程序的入口地址就能从主程序转入子程序子程序在功能上具有相对的独立性,在执行主程序的过程中往往被多次调 用,甚至被不同的程序所调用。一般微机首先执行主程序,碰到...
  • 中断调用与子程序调用

    千次阅读 2017-04-19 09:46:11
    1、两过程定义与作用 子程序是微机基本程序结构中的1种,基本程序结构包括顺序(简单)、分支(判断)、循环、子程序和...一般微机首先执行主程序,碰到调用指令就转去执行子程序子程序执行完后,返回指令就返回主程
  • 汇编之控制转移指令之子程序中断指令和系统功能调用前言子程序CALL调用指令RET返回指令中断指令和系统功能调用中断中断中断种类中断向量软中断指令中断响应过程中断嵌套中断处理程序设计设置中断向量DOS系统...
  • 什幺是子程序?*在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部份代码,由一个或多个语句块组成。它负责完成某项特定任务,...
  • 自动关闭中断和把原执行程序的断点地址压入堆栈按中断源提供的中断矢量自动转入相应中断服务程序执行自动或通过安排在中断服务程序指令来撤消本次中断请求,以避免再次响应本次中断的请求(4)中断返回§6.3...
  • CPU正在处理某个事件,突然另外一个事件需要处理,于是进入中断后,而你不想将现在执行的程序的各寄存器状态入栈,那么可以把这个中断程序放入另一个寄存器组,如切换到1组,然后退出中断时,再切回到0组(原来的...
  • 原标题:PLC的条件跳转,子程序调用等指令使用方法点条件跳转指令指令名称,助记符,指令代码,程序步如下表: 程序步可以是连续执行或者是脉冲执行,CJ执行的为3步,CJ(P)为1步。指令格式: 当我们按下X000后,...
  • 实现这一步骤的必要性在于:一旦中断服务程序驻留内存后,一般程序员使用这一新增的中断调用就如同调用DOS或BIOS的中断子程序一样,只要了解其入口要求和返回参数就可调用。程序驻留在内存后,它占用的存储区就不会...
  • 然后,系统将控制返回至调用子程序网络中的主程序。子程序用于为程序分段和分块,使其成为较小的、更易管理的块。在程序中调试和维护时,您可以利用这项优势。通过使用较小的程序块,对这些区...
  • 西门子PLC的子程序功能介绍

    千次阅读 2021-12-13 15:27:04
    STEP7-Micro/Win在程序编辑器窗口中为每个POU提供单独的页面。...有两种指令:子程序调用和子程序返回子程序返回分为条件返回和无条件返回。子程序调用指令用于主程序或其他调用子程序的程序,子程序的无
  • PIE/CPU中断响应过程

    2021-01-06 13:17:28
    I、CPU响应,进入中断服务子程序前,DSP硬件自动将IFRx清0,然后将CPU内一些关键寄存器如:ST0、ST1及IER等的内容压到堆栈保存起来,随后硬件自动将IERx清0,INTM置1,以避免中断嵌套,在中断服务子程序执行完返回后...
  • 主程序怎样调用子程序

    千次阅读 2021-04-26 15:02:39
    快速导读:Q1:vbs怎么调用子程序?你可以这样操作比如你要调用C:\m.exe Set ws = CreateObject("Wscript.Shell") Set fs = CreateObject("Scripting.FileSystemObject") ws.Run "c:\m.exe" 希望能帮助你!!!!!Q2...
  • 在开始写中断函数之前,我们来一起回顾一下,...(8051有3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1(这两个低电平有效,上面的那个横杠不知道怎么加上去))(2)中断响应与返回:CPU采集到中断请求信号...
  • 一,中断的定义 二 ,中断处理的过程 三,8086/8088CPU可以处理256种不同类型的终端 四,中断服务程序的设计方法 五中断向量表的建立
  • 子程序调用和中断指令

    千次阅读 2007-05-20 17:25:00
    调用的时候ip或eip压栈将机器执行的当前值(即call指令的下一条指令的地址)压入堆栈以便子程序返回用。2.返回ret返回时ip出栈带参数的返回指令 ret NN是一个16位的常数(偶数),该指令是将返回地址弹入ip或eip后在...
  • c语言中的中断函数注意事项单片机_C语言函数_中断函数(中断服务程序)在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在...
  • 51单片机中断系统程序实例 (STC89C52RC)51单片机有了中断,在程序设计中就可以做到,在做某件事的过程中,停下来先去响应中断,做别的事情,做好别的事情再继续原来的事情。中断优先级是可以给要做的事情排序。...
  • 为什么中断子程序中不能使用延时和过长的程序?

    千次阅读 多人点赞 2019-07-04 21:25:18
    所以,中断子程序中不要写调用延时子程序,中断子程序也不要写得过长,处理过多的任务,要尽快处理后及时返回,如果中断一次有很多任务需要执行完全,可以在中断子程序中设置一个标志位,在主程序中查这个标志位,当...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,897
精华内容 44,758
关键字:

中断子程序的返回指令是