您的位置:首页 > Web前端 > JavaScript

javascript的replace方法与正则表达式结合应用

2011-06-28 17:26 1096 查看
当多个中断源向CPU发送中断请求时,因为CPU在任何瞬间只能接受一个中断源的请求,所以要进行中断判优。当CPU确定要响应哪个中断源的中断请求后,要进行接下来的两步:

1、中断响应。
CPU响应中断后,即进入中断周期。在中断周期内,CPU要自动完成一系列操作,如下:
(1)、保护程序断点。即是将当前程序计数器PC中的内容(程序断点)保存到存储器或堆栈中,目的是为了在中断服务程序执行完毕后能正确返回原来的程序继续执行。(关于程序断点的问题,我有篇博文《指令指针寄存器IP和程序计数器PC的区别》中讲到了,不懂可以看看)
(2)、寻找中断服务程序的入口地址。由于在中断处理阶段的主要任务就是执行中断服务程序,所以在中断响应阶段结束前必须找到中断服务程序的入口地址。
(3)、关中断。CPU进入中断响应阶段,意味着CPU响应了某个中断源的请求,为了确保CPU响应后所需做的一系列操作不至于受到新的中断请求的干扰,必须关中断,以确保CPU不再响应新的中断请求。
注意:一、CPU要响应中断必须满足以下三个条件:
1、 CPU接受到中断请求信号。
2、 CPU允许中断,即开中断。
3、 一条指令执行完毕,这是CPU响应中断请求的时间限制条件。(这也是与DMA控制方式的一个区别)
二、上述的保护断点、寻找中断服务程序入口地址和关中断操作都是在中断响应阶段由一条中断隐指令完成。所谓中断隐指令,即在机器指令系统中没有的指令,它是CPU在中断响应阶段由硬件自动完成的一条指令。

2、中断处理。
过了中断响应阶段后,就进入了中断处理阶段。中断处理阶段主要是执行中断服务程序的过程。
(1)、保护现场。在中断服务程序的起始部分安排了若干条存数指令,将一些寄存器中的内容存至存储器或堆栈中保存。为什么要保存这些寄存器中的内容呢?因为在中断服务程序执行过程中可能会用到这些寄存器,万一寄存器中的内容被改变,那么在返回原程序继续执行时就会出错,所以要将原程序用到的这些寄存器的内容保存起来(即保护现场)。
(2)、中断服务。这是中断服务程序的主体部分,为发出中断请求的中断源进行服务。
(3)、恢复现场。在中断服务程序的结尾部分,要求在退出服务程序前,将原程序中断时的“现场”恢复到原来的寄存器中。(这也是为了在返回原来的程序后继续执行做准备)。
(4)、开中断,中断返回。中断返回就是执行一条中断返回指令,把上面保存的程序的断点还传回程序计数器PC里面,以返回原来的程序继续执行。为什么要在这里开中断,我要特别声明一下:我们是在中断响应阶段由硬件自动关的中断,目的就是为了保证CPU不再响应新的中断请求,然后在中断服务程序执行完毕后,也就是在这里才开中断,目的就是为了在执行中断服务程序的过程中,不让CPU再处理其它中断请求。当然这是单重中断的情况。那多重中断时呢?多重中断就是当CPU在执行中断处理的过程中,又有比该中断优先级更高的中断请求发来, 这时CPU暂停执行现行的中断处理,转去处理新的中断。要想让CPU在执行某个中断处理的过程中去响应优先级更高的中断处理,那么在执行中断服务程序的开头部分必须把中断响应阶段关闭的中断打开,因为只有这样CPU才可能去处理别的中断处理啊,如果不在中断服务程序的开头部分把中断打开,那么CPU根本不会理睬别的中断请求,即使是比现行中断优先级高的中断也不会理睬。所以对于单重中断和多重中断来说,这个开中断的时间是不一样的。如下图:







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: