?? page295.html
字號:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第11章 更高級的技術</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="page294.html">上一頁</a> <a href="page296.html">下一頁</a> <a href="page328.html">附錄A</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></td><td></td>
<td colspan=6><img src="icons/flag.gif"></td><td colspan=4></td><td colspan=6 align="right">第11章 更高級的技術</td> <!章節名>
<td></td><td>-295-</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>
采用"中斷"技術是一個最常用的途徑。因為PC電腦可處理的中斷較多,達256個,而且最吸引人的是每個中斷的服務程序可以在內存中的任意位置。只要將服務程序的入口地址正確填入中斷向量表內,那么無論服務程序在何處CPU都能準確無誤地執行。由此我們想到可以把駐留在內存中的程序編寫成某個中斷的服務程序,需要這個程序執行時調用相應的中斷即可。<br>
許多流行的軟件都是這樣做的,比如SideKick,以及專門抓取屏幕圖形的PZP軟件等。就連我們常用的DEBUG也要重編01H和03H中斷服務程序,以實現它的"P"、"T"和"G"命令。所以說重編中斷服務程序是駐留內存技術中一個十分重要的環節。<br>
在真正開始編寫中斷服務程序之前我們必須對PC系統的各個中斷有一個總體的了解才行,附錄A給出了所有256個中斷的用途,這其中有一些中斷系統沒有使用。<br>
對于編制駐留內存程序而言,并非所有的中斷都常用,也并非只能使用系統保留的中斷。本章只對應用最廣的幾個中斷做較詳細的解釋,并給出一些程序示例說明編制中斷服務程序的要點。<br>
(1)09H中斷<br>
這是一個由鍵盤產生的硬件中斷,每次當我們把一個鍵按下時,鍵盤就會發出一個中斷信號,這個信號稱為IRQ1。CPU收到信號后就會執行09H中斷服務程序,系統提供的服務程序用于從鍵盤取得按鍵的掃描碼,每個掃描碼都是一個字節的數據。<br>
當一個按下的鍵被放開時鍵盤同樣產生IRQ1信號,CPU也會執行09H中斷服務程序從鍵盤接收掃描碼。一般我們把按下鍵產生的掃描碼稱為"通碼",把放開鍵產生的掃描碼稱為"斷碼"。通碼的最高位(Bit7)都是0,而斷碼的最高位都是1。09H中斷服務程序也是根據這一特點來區分通碼與斷碼的,它只處理通碼。<br>
如果我們重編09H中斷服務程序,那么我們就能對鍵盤上的各個鍵重新定義。比如一般情況下按下[Enter]是回車,按下[Space]是空格,而我們重新編寫的中斷服務程序完全可以在接收到[Enter]鍵的掃描碼時將其解釋為空格,接收到[Space]時把它解釋為回車。這樣就等于鍵盤完全被我們的程序接管了。<br>
下面這個程序就是一個新編的09H中斷服務程序,運行這個程序后它會駐留內存,當按下[F11]功能鍵時屏幕上所有字符的顏色都被改成綠色,按下[F12]功能鍵后所有字符都是紅色:
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2>
NEW09.ASM<br>
code<br>
<br>
<br>
start:<br>
<br>
new09:<br>
<br>
<br>
<br>
<br>
<br>
</td>
<td colspan=2>
<br>
segment<br>
assume<br>
org<br>
<br>
jmp<br>
<br>
push<br>
push<br>
push<br>
push<br>
push
</td>
<td colspan=5>
<br>
<br>
cs:code,ds:code<br>
100h<br>
<br>
install<br>
<br>
ax<br>
bx<br>
cx<br>
di<br>
es
</td>
<td colspan=9>
<br>
<br>
<br>
<br>
<br>
;轉程序駐留部分<br>
;新編的09H中斷服務程序<br>
;進入中斷服務程序時首先保存寄存器<br>
<br>
<br>
<br>
<br>
</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="page294.html">上一頁</a> <a href="page296.html">下一頁</a> <a href="page328.html">附錄A</a></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -