打字猴:1.70041455e+09
1700414550
1700414551
1700414552
1700414553 在第2章微型计算机的电路图中已经展示过,在Z80 CPU中有和两个引脚,它们可以接收从I/O设备发出的中断请求信号(引脚用于处理一般的中断请求。引脚则用于即使CPU屏蔽了中断,也可在执行中的指令结束后立即响应中断请求的情况)。以硬件形式连接到CPU上的I/O模块会发出中断请求信号,CPU根据该信号执行相应的中断处理程序。在诸位使用的个人计算机上,中断请求信号是由连接到周边设备上的I/O模块发出的。例如每当用户按下键盘上的按键,键盘上的I/O模块就会把中断请求信号发送给CPU。CPU通过这种方式就可以知道有按钮被按下,于是就会从I/O设备读入数据(如图4.14所示)。CPU并不会时刻监控键盘是否有按键被按下
1700414554
1700414555 图4.14 中断请求信号由连接到周边设备上的I/O发出
1700414556
1700414557
1700414558
1700414559
1700414560 中断处理以从硬件发出的请求为条件,使程序的流程产生分支,因此可以说它是一种特殊的条件分支。可是,在编写的程序中并不需要编写有关中断代理的代码。因为处理中断请求的程序,或是内置于被烧录在计算机ROM中的BIOS系统(Basic Input Output System,基本输入输出系统)中,或是内置于Windows等操作系统中。诸位只需先记住以下两点即可:计算机具有硬件上处理中断的能力;中断一词的英文是Interrupt。
1700414561
1700414562
1700414563
1700414564
1700414565 计算机是怎样跑起来的 [:1700412652]
1700414566 计算机是怎样跑起来的 4.7 特殊的程序流程–事件驱动
1700414567
1700414568 程序员经常用事件驱动的方式编写那些工作在GUI(Graphical User Interface,图形用户界面)环境中的应用程序,例如,Windows操作系统中的应用程序。这听起来好像挺复杂的,但其实如果把事件驱动想象成两个程序在对话,理解起来就简单了
1700414569
1700414570 下面看一个实际的例子。代码清单4.5中列出了一段用C语言编写的Windows应用程序,这里只列出了程序的骨架。在程序中有WinMain()和WndProc()两个函数(代码块)。WinMain()是在程序启动时被调用的主例程(Main Routine)。而WndProc()并不会被诸位所编写的程序本身调用,Windows操作系统才是WndProc()的调用者。这种机制就使得Windows和诸位所编写的应用程序之间进行对话
1700414571
1700414572 代码清单4.5 用C语言编写的Windows应用程序的骨架
1700414573
1700414574 /*主例程*/
1700414575
1700414576 int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,LPSTR lpCmdLine, int nCmdShow){
1700414577
1700414578
1700414579
1700414580 }
1700414581
1700414582 /*窗口过程*/
1700414583
1700414584 LRESULT CALLBACK WndProc(HWND hWnd, UNIT msg, WPARAM wParam, LPARAM lParam){
1700414585
1700414586
1700414587
1700414588 }
1700414589
1700414590 通常把用户在应用程序中点击鼠标键或敲击键盘按键这样的操作称为事件(Event)。负责检测事件的是Windows。Windows通过调用应用程序的WndProc()函数通知应用程序事件的发生。而应用程序则根据事件的类型做出相应的处理。这种机制就是事件驱动。可以说事件驱动也是一种特殊的条件分支,它以从Windows送来的通知为条件,根据通知的内容决定程序下一步的流程
1700414591
1700414592 要实现事件驱动,就必须把应用程序中的WndProc()函数(称为窗口过程,Window Procedure)的起始内存地址告诉Windows。这一步将在应用程序WinMain()中作为初始化处理被执行
1700414593
1700414594 事件驱动是一种适用于GUI环境的编程风格。在这种环境中用户可以通过鼠标和键盘来操作应用程序。虽然事件驱动的程序也可以用流程图表示,但由于要排列很多的菱形符号(表示条件分支),画起来会很复杂。所以下面介绍便于表示事件驱动的“状态转化图”。状态转化图中有多个状态,反映了由于某种原因从某个状态转化到另一个状态的流程。工作在GUI环境中的程序,其显示的在画面上的窗口就有若干个状态。例如,图4.15所示的计算器应用程序就可以看作包含三个状态:“显示计算机结构”、“显示第一个输入的数”以及“显示第二个输入的数”。随着用户按下不同种类的键,状态也会发生转变。
1700414595
1700414596 图4.15 Windows附带的计算器应用程序
1700414597
1700414598
1700414599
[ 上一页 ]  [ :1.70041455e+09 ]  [ 下一页 ]