打字猴:1.70041454e+09
1700414540
1700414541
1700414542 计算机是怎样跑起来的 [:1700412651]
1700414543 计算机是怎样跑起来的 4.6 特殊的程序流程–中断处理
1700414544
1700414545 最后稍微介绍一下两种特殊的程序流程–中断处理和事件驱动(Event Driven)。首先说明中断处理
1700414546
1700414547 中断处理是指计算机使程序的流程突然跳转到程序中的特定地方,这样的地方被称为中断处理例程(Rountine)或是中断处理程序(Handler),而这种跳转是通过CPU所具备的硬件功能实现的。人们通常把中断处理比作是接听电话。假设正坐在书桌前处理文件,这时突然来电话了,不得不停下手头的工作接听电话,接完电话再回到之前的工作。像这样由于外部的原因使正常的流程中断,中断后再返回之前流程的过程就是中断处理流程
1700414548
1700414549
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
[ 上一页 ]  [ :1.70041454e+09 ]  [ 下一页 ]