子程序是微机基本程序结构中的1种,基本程序结构包括顺序(简单)、分支(判断)、循环、子程序和查表等5种。
子程序是一组可以公用的指令序列,只要给出子程序的入口地址就能从主程序转入子程序。子程序在功能上具有相对的独立性,在执行主程序的过程中往往被多次调用,甚至被不同的程序所调用。一般微机首先执行主程序,碰到调用指令就转去执行子程序,子程序执行完后,返回指令就返回主程序断点(即调用指令的下一条指令),继续执行没有处理完的主程序,这一过程叫做(主程序)调用子程序过程。
子程序结构可简化程序,防止重复书写错误,并可节省内存空间。计算机中经常把常用的各种通用的程序段编成子程序,提供给用户使用。用户在自己编写的程序中,只要会调用这些子程序,就可大大简化用户编程的困难。
主程序在执行过程中执行子程序,我们称之为子程序调用。
完成子程序调用/中断需要几个概念:入口地址。程序是一组指令,第一条指令的地址称为程序的入口地址。
中断和断口地址。一个程序在执行的过程中去执行另一个程序,我们称之为中断,程序中断时的下一条指令的地址称为程序的断口地址。
保护现场和恢复现场。如果主程序中断时,有些寄存器还存放着中间结果,而子程序很有可能要占用这些寄存器,那么就要将主程序的中间结果存入其他地方(比如堆栈),把寄存器“让给”子程序,这个过程就是保护现场。待子程序/中断服务函数完毕,再将主程序的中间结果放回寄存器,这个过程就好似恢复现场。
子程序/中断调用过程。当主程序转去执行子程序/中断时,首先将断口地址压入堆栈保存,然后将子程序的入口地址送入PC。进入子程序后首先保护现场,然后执行子程序,子程序执行完毕后,恢复现场,然后将端口地址从栈顶送回PC。
我们这里的分析仅仅是一种通用的、笼统的分析,不是在具体一个CPU上的分析。在一个具体的CPU的子程序调用及中断的过程可能有些不同,
但是大体流程还是相同的:现场保护-》执行子程序/中断服务函数-》恢复现场。
联系
中断与调用子程序两过程属于完全不同的概念,但它们也有不少相似之处。两者都需要保护断点(即下一条指令地址)、跳至子程序或中断服务程序、保护现场、子程序或中断处理、恢复现场、恢复断点(即返回主程序)。两者都可实现嵌套,即正在执行的子程序再调另一子程序或正在处理的中断程序又被另一新中断请求所中断,嵌套可为多级。
正是由于这些表面上的相似处,很容易使学生把两者混淆起来,特别是把中断也看为子程序,这就大错特错了。
两者的根本区别表现在服务时间和服务对象上不一样。1)调用子程序发生的时间是已知的和固定的,即在主程序的调用指令(CALL)执行时发生主程序调用子程序过程,调用指令所在位置是已知的和固定的;而中断过程发生的时间一般是随机的,CPU在执行某一主程序时受到中断源提出的中断申请,就发生中断过程,而中断申请一般由硬件电路产生,申请时间是随机的。也可以说,调用子程序是程序设计者事先安排好的,而执行中断服务程序是由系统工作环境随机决定的。
2)子程序完全为主程序服务,两者属于主从关系。主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序二者一般是无关的,两者是平行关系。
3)主程序调用子程序的过程完全属于软件处理过程,不需要专门的硬件电路,而中断处理系统是一个软、硬件结合的系统,需要专门的硬件电路才能完成中断处理的过程。
4)子程序嵌套可以实现若干级,嵌套的最多级数受计算机内存开辟的堆栈大小限制;而中断嵌套级数主要由中断优先级来决定,一般优先级不会很大。
从宏观上看,虽然程序中断方式克服了程序查询方式中CPU“踏步”现象,实现了CPU与IO并行工作,提高了CPU的资源利用率,但从微观 *** 作分析,CPU在处理中断程序时,仍需暂停原程序的正常运行,尤其是当高速I/O设备或辅助存储器频繁地、成批地与主存交换信息时,需不断打断CPU执行现行程序,而执行中断服务程序。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)