
中断隐指令由CPU执行。中断隐指令指CPU响应中断之后,经过某些 *** 作,转去执行中断服务程序的一种 *** 作。中断隐指令并不是指令系统中的一条真正的指令,它没有 *** 作码,所以中断隐指令是一种不允许、也不可能为用户使用的特殊指令。其所完成的 *** 作主要有:(1)保存断点为了保证在中断服务程序执行完毕能正确返回原来的程序,必须将原来程序的断点(即程序计数器(PC)的内容)保存起来。断点可以压入堆栈,也可以存入主存的特定单元中。(2)暂不允许中断暂不允许中断即关中断。在中断服务程序中,为了保护中断现场(即CPU主要寄存器的内容)期间不被新的中断所打断,必须要关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确地执行下去。并不是所有的都在中断隐指令中由硬件自动地关中断,也有些的这一 *** 作是由软件(中断服务程序)来实现的。中断服务程序一般用来保存通用寄存器和状态寄存器的内容。(3)引出中断服务程序引出中断服务程序的实质就是取出中断服务程序的入口地址送程序计数器(PC)。对于向量中断和非向量中断,因此中断服务程序的方法是不相同的
CPU响应中断后,即进入中断周期在中断周期内,CPU要自动完成一系列 *** 作,如:
(1)保护程序断点保护程序断点就是要将当前程序计数器PC的内容(程序断点)保存到存储器中它可以存在存储器的特定单元(如0号地址)内,也可以存入堆栈
(2)寻找中断服务程序的入口地址由于中断周期结束后进入下条指令(即中断服务程序的第一条指令)的取指周期,因此在中断周期内必须设法找到中断服务程序的入口地址由于入口地址有两种方法获得,因此在中断周期内也有两种方法寻找入口地址:
其一,在中断周期内,将向量地址送至PC(对应硬件向量法),使CPU下一条执行无条件转移指令,转至中断服务程序的入口地址
其二,在中断周期内,将软件查询入口地址的程序(又叫中断识别程序)其首地址送至PC,使CPU执行中断识别程序,找到入口地址(对应软件查询法)
(3)关中断CPU进入中断周期,意味着CPU响应了某个中断源的请求,为了确保CPU响应后所需作的一系列 *** 作不至于又受到新的中断请求的干扰,在中断周期内必须自动关中断,以禁止CPU再次响应新的中断请求允许中断触发器EINT和中断标记触发器INT可选用标准的R-S触发器当进入中断周期时,则T为"1"状态,触发器原端输出有一个正跳变,经反相后产生一个负跳变,使EINT置0,即关中断
上述保护断点,寻找入口地址和关中断这些 *** 作都是在中断周期内由一条中断隐指令完成的所谓中断隐指令即在机器指令系统中没有的指令,它是CPU在中断周期内由硬件自动完成的一条指令
① 响应中断请求。当 CPU 正在执行主程序时,如果接收到中断源发出的中断请求信号,就会响应中断请求,停止主程序,开始执行中断。
② 保护断点。为了在执行完中断后能返回主程序,在执行中断时,会将主程序的下一条指令的地址(又称断点地址)保存到数据存储器(RAM)的堆栈中。
③ 寻找中断入口地址。保护好断点后,CPU开始寻找中断入口地址(又称矢量地址),中断入口地址存放着相应的中断子程序,不同的中断源对应着不同的中断入口地址。MCS-51系列单片机5个中断源对应的中断入口地址见表
④ 执行中断子程序。CPU寻找到中断入口地址后,就开始执行中断入口地址处的中断子程序。由于几个中断入口地址之间只有8个单元空间(表中如0003H~000BH相隔8个单元),较小的中断子程序(程序只有一两条指令)可以写在这里,较大的中断子程序无法写入,通常的做法是将子程序写在其他位置,而在中断入口地址单元只写一条跳转指令,由该指令跳转到中断子程序。
⑤ 中断返回。执行完中断子程序后,就会返回到主程序,返回的方法是从RAM的堆栈中取出之前保存的断点地址,然后执行该地址处的主程序,从而返回到主程序。
中断处理的过程中需要开关中断2次
开始:
程序正常执行
↓响应中断
关中断(开始中断程序后,CPU不能再响应更高级的中断,所以先关闭)
↓保存断点;保存中断程序地址;保存现场(这里是保存中断请求的必要信息)
开中断(把中断打开,现在允许执行更高级别的中断)
↓执行中断服务程序(这里是可以响应高级别中断的)
关中断(和第一次中断一样,在恢复现场的情况下,不能响应另外的中断)
↓恢复现场
开中断
↓中断返回
中断处理过程:(1)保护被中断进程现场。为了在中断处理结束后能够使进程准确地返回到中断点,系统必须保存当前处理机程序状态字PSW和程序计数器PC等的值。(2)分析中断原因,转去执行相应的中断处理程序。在多个中断请求同时发生时,处理优先级最高的中断源发出的中断请求。(3)恢复被中断进程的现场,CPU继续执行原来被中断的进程。
保存和恢复现场的意义在于处理完中断请求之后,程序可以返回起始中断点继续进行。
打个比方:
一个程序正在运行,但是有一个紧急事情要先去处理。但是程序是不能放弃现在运行到的阶段,所以在处理紧急事件时(就是中断),那么先要将运行到的地方进行一个现场保护,您可以理解为存储下来。然后去处理中断,中断结束之后要恢复原来的运行到的阶段。那么就需要将促出下来的现场保护给恢复出来。那这个就是恢复现场了。同样,出现多个中断的时候,要视中断的优先级来优先处理。
中断是现在衡量处理器性能重要标准之一。楼主要好好学习!
希望这些能够有所帮助!
gdb 被断点替换的指令保存到:输入run或r回车就能运行到设置的断点处,输入next或s回车单步运行。
启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。可让被调试的程序在你所指定的调置的断点处停住。当程序被停住时,可以检查此时你的程序中所发生的事。
gdb断点:
break line-number 使程序恰好在执行给定行之前停止。
break function-name 使程序恰好在进入指定的函数之前停止。
break line-or-function if condition 如果condition(条件)是真,程序到达指定行或函数时停止。
以上就是关于中断时,状态寄存器是由硬件保存的吗全部的内容,包括:中断时,状态寄存器是由硬件保存的吗、CPU正在响应外部中断0的中断请求。若在程序设置PT1=1,CPU又怎处理、已达中断点如何处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)