📄 page28.html
字号:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第3章 中断调用与子程序</title>
</head>
<body>
<style type="text/css">
body {
background-color: #c0c0c0;
}
table {
background-color: #c0c0c0;
line-height: 24px;
}
</style>
<!导航条>
<p><a href="content1.html">目录</a> <a href="page27.html">上一页</a> <a href="page29.html">下一页</a> <a href="page45.html">下一章</a></p>
<table border=0 align="center" width=800 frame="box" rules="none">
<!标尺行>
<tr>
<td width=3%></td><td width=6%></td><td width=1%></td>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=1%></td><td width=6%></td><td width=3%></td>
</tr>
<!页眉行>
<tr height=60 valign="bottom">
<td></td><td>-28-</td><td></td> <!页码>
<td colspan=6>PC机汇编语言实战精解</td><td colspan=4></td><td colspan=6 align="right"><img src="icons/flag.gif"></td> <!书名>
<td></td><td></td><td></td> <!右侧空白>
</tr>
<!页眉线>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!正文>
<font face="宋体" lang="ZH-CN" size=3>
<tr height=20><td colspan=22></td></tr> <!顶部空白>
<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
<p>
<font face="楷体_GB2312" lang="ZH-CN" size=3>
回来继续读书;若电话铃响同时水也开了,那么A君出于对生命的珍惜必然先去关煤气灶,然后去接电话;若在接电话的过程中水开了,那么A君必然会让对方先等一等,待他关闭煤气灶后,再返回来继续接电话,接完电话后再回到书房继续读书。<br>
</font>
说了这许多,其含义不言而喻:我们是在收到“信号”后才中断正在做的事情,转去处理其它事情。而且“重要”的事情总是优先处理。<br>
CPU的工作情况和我们人类相似,在我们使用的电脑中,CPU是以另一种工作方式--“中断方式”工作的。CPU专心执行一个主要的程序,对外部设备不闻不问。当键盘有键被接下时,键盘会通过电路向CPU发一个信号,CPU收到信号后就会记下当前程序将要执行的指令的地址,而后去执行一小段“中断服务程序”来保存键盘输入的数据。处理完毕,CPU又会回到刚才被中断的地方继续完成其“本职工作”;当打印机需要数据时,它也会向CPU发出信号,CPU收到信号后,同样会中断正在干的活,转去执行另一小段服务程序给打印机提供支援。<br>
不难看出,以这种方式工作时CPU的效率就比较高。当外设没有要求CPU提供服务时,CPU会全力执行其主要的任务。而且只要设计出良好的中断信号传输与处理电路,这种工作方式的可靠性是很高的。所谓“中断”,指得就是CPU的这样一种工作方式。<br>
</p>
</tr>
<tr>
<td></td><td></td>
<td colspan=3 align="center"><img src="icons/attention.gif"></td>
<td colspan=15><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>
这里有两个名词需要首先说明:<br>
(1)中断源──中断的来源(产生中断信号的设备或指令);<BR>(2)中断服务程序──CPU在收到中断信号后所执行的为中断源提供服务的小段程序。<br>
</font></td>
<td></td><td></td> <!右边距>
</tr>
<!正文>
<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
<p>
依据中断源的不同,一般把中断分成三类:硬件中断、软件中断和处理机中断。硬件设备产生的中断就是硬件中断;由INT指令产生的中断称为软件中断;而由CPU本身产生的中断就是处理机中断。<br>
</p>
</td>
<td></td><td></td> <!右边距>
</tr>
<!正文>
<tr>
<td></td><td></td> <!左边距>
<td colspan=18><FONT FACE="黑体" LANG="ZH-CN"><A NAME="312"><P>3.1.2 中断的处理过程</P></A></FONT>
<p>
无论是对硬件、软件还是处理机中断,CPU的处理方式都是一样的:
</p>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=3 align="center"><img src="icons/attention.gif"></td>
<td colspan=15><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>
<p>
(1)当CPU收到中断信号或执行INT指令后,CPU首先会把标志寄存器推入堆栈,而后再把指令指针IP和代码段地址寄存器CS推入堆栈。这样做的目的是为了在执行完中断服务程序后能正确地返回被中断处继续执行程序,相当于我们记下正在读的页码。<BR>(2)保存完返回地址后,CPU就转去执行相应的中断服务程序。
</p>
</font></td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
<p>
这里就有这样一个问题,CPU如何知道中断服务程序在内存中的位置呢?<br>
如果PC电脑只有一个中断及其服务程序那么这个问题就简单了。不过我们使用的PC电脑所接的外部设备不止一个,键盘、软盘驱动器、打印机等等。每种设备基本上都用中断方式与CPU联系。况且中断不一定都来自外设,还可能来自处理机或软件。这就要求CPU可以区分不同的中断源,处理多个中断。<br>
在设计8086/88CPU时,Intel公司的技术人员为其安排了256个中断,而且这些中断都被编了号,从0到0FFH。不同的中断源产生中断的号码不一样,例如处理机产生中断的号码范围固定为00H-07H;而外设产生中断的号码范围是08H-0FH,70H-77H两部分;“INT nn”指令中
</p>
</td>
<td></td><td></td> <!右边距>
</tr>
</font>
<!页脚线>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!页脚>
<tr height=60 valign="top">
<td></td><td></td>
<td colspan=9><i>Copyright © 2004-2005 <a href="mailto:webmaster@nucstorm.com">Chunk Lee</a></i></td>
<td colspan=9 align="right"><i><a href="http://www.nucstorm.com" target="_top">www.nucstorm.com</a></i></td>
<td></td><td></td>
</tr>
</table>
<!导航条>
<p align="right"><a href="content1.html">目录</a> <a href="page27.html">上一页</a> <a href="page29.html">下一页</a> <a href="page45.html">下一章</a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -