自然界中河流的三种流动方式?
向着一个方向流淌;流着流着产生支流;卷成漩涡。与河流的流动方式一样,程序的流程也分为三种。“顺序执行”,“条件分支”, “循环”。
为什么说“程序是流动着的”呢?因为作为计算机大脑的CPU在同一时刻基本上只能够解释、执行一条指令。把指令和作为指令操作对象的数据排列起来就形成了程序。
程序的流程分成三种
内存中存储着程序,也是就是指令和数据。CPU配合着由时钟发生器发出的滴答滴答的时钟信号,从内存中读出指令,然后再依次对其进行解释和执行。
CPU中有各种各样的各司其职寄存器,其中有一个被称为PC寄存器,负责存储内存地址,该地址指向下一条即将执行的指令。每解决执行完一条指令,PC寄存器的值就会自动更新为下一条指令的地址。
顺序执行是按照指令记录在内存中的先后顺序依次执行的一种流程。而循环则是在程序的特定范围内反复执行若干次的一种流程。条件分支是根据若干条件的成立与否,在程序的流程中产生若干个分支的一种流程。无论规模多么大多么复杂的程序,都是通过把以上三种流程组合起来实现的。
程序的三种流程正像是河流本身。从高山的泉眼中涌出的清泉开形成了河流的源头(程序执行的起点)。
结构化程序设计
结构化程序设计是指“为了把程序编写得具有结构性,仅使用顺序执行、条件分支和循环表示程序的流程即可,而不再使用跳转指令”。
这种设计只是针对高级语言来设计的。因为跳转指令所带来的危害不小,会使程序陷入到流程错综复杂的状态,就像意大利面条那样缠绕在一起。
不过需要注意的是,即使使用了结构化处理, 在硬件上使用也还是跳转指令,只是说在高级语言中不用再写相当于跳转指令的语句了。
特殊的程序流程———中断处理
中断处理是指计算机使程序的流程突然跳转到程序中的特定地方,这样的地方被称为中断处理例程或是中断处理程序,而这种跳转是通过CPU所具备的硬件功能实现的。
中断处理以硬件发生的请求为条件,使程序的流程产生分支,因此可以说它是一种特殊的分支。可是,在诸位编写的程序中并不需要编写有关中断处理的代码。
因为处理中断请求的程序,或是内置于被烧录在计算机ROM中的BIOS系统中,或是内置于Windows等操作系统中。只要记住,计算机具有硬件上处理中断的能力。
特殊的程序流程———事件驱动
通常把用户在应用程序中点击鼠标或者敲击键盘这样的操作称为事件。负责检测事件的是windows。windows通过调用应用程序的WndProc()函数通知应用程序事件的发生。而应用程序则根据事件类型做出相应的处理。这种机制就是事件驱动。
可以说事件驱动也是一种特殊的条件分支,它以从Windows送来的通知为条件,根据通知的内容进行下一步的流程。要实现事件驱动,就必须把应用程序的WndProc()函数的起始内存地址告诉windows。
事件驱动是一种适用于GUI环境的编程风格。
读完本节后可能会觉得有点乱,不过程序的流程还是只有顺序执行、条件执行和循环这三种,这一点是没有改变的。
其中的顺序执行是最基本的程序流程,这是因为CPU中的PC寄存器的值会自动更新。条件分支和循环,在高级语言中用程序块表示,在机器语言和汇编语言中用跳转指令表示,在硬件上是通过把PC寄存器的值设为要跳转到的目的地的内存地址来实现。