?? page29.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="page28.html">上一頁</a> <a href="page30.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></td><td>
<td colspan=6><img src="icons/flag.gif"></td><td colspan=4></td><td colspan=6 align="right">第3章 中斷調用與子程序</td> <!章節名>
<td></td><td>-29-</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"> “nn”可以是00H-0FFH中任一個數。<a href="page29.html#note1"><sup>①</sup></a><br>
每個被使用中斷都有對應的中斷服務程序,所有這些中斷服務程序在內存中的起始(入口)邏輯地址被組織在一起,保存于內存中的一段特定的區域內。這段區域從邏輯地址0000:0000開始,到0000:03FFH為止共1KB字節。<br>
每4個字節保存一個中斷服務程序的入口,從0000:00000開始,0-3字節保存0號中斷服務程序的入口地址,4-7字節保存1號中斷服務程序的入口地址,以此類推。保存所有256個中斷服務程序的入口地址恰好使用1KB存儲器。<br>
由于每個入口地址都指向內存中的一段程序,所以我們引用數學中向量的概念,把這些入口地址稱為"中斷向量",256個"中斷向量"組織在一起形成一個"表",我們把這個"表"稱為"中斷向量表"。這個表就是CPU取得中斷服務程序入口地址的依據。給定一個中斷號,即可根據下式計算其對應服務程序入口地址在中斷向量表中的偏移量:<br>
偏移量=nn×4<br>
利用DEBUG程序可以觀察到中斷向量表。進入DEBUG,在"-"后打入"D0:0[Enter]",屏幕上就會顯示出中斷向量表中的部分入口地址。<br>
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan="3" align="center"><img src="icons/attention.gif" width="39" height="50"></td>
<td colspan="15"><font FACE="楷體_GB2312" LANG="ZH-CN" SIZE="3">
為了能觀察內存中任意位置存放的數據,DEBUG提供了一條"內存轉儲"命令,命令碼是"D"(Dump)。使用方法很簡單,在提示符后輸入"D
邏輯地址 長度"并回車,DEBUG會從指定地址開始將內存中的數據以16進制形式顯示在屏幕上,同時在屏幕右則顯示出一些數據所對應的ASCII字符。<br>
如果沒有給出完整的邏輯地址,只給出偏移量,則DEBUG會默認DS為段地址。如果未指定地址,則DEBUG就認為起始地址是跟在由前一個D命令所顯示的單元的后面。連續輸入不帶參數的D命令,可連續顯示內存中的數據。下面列出了D命令的一些用法:<br>
-D0:0[Enter] 從內存0:0處開始顯示數據<br>
-DES:100[Enter] 從內存中ES所指定段的偏移100H處開始顯示數據<br>
-D0B30:0 3FF[Enter] 從內存中0B30:0處開始連續顯示1KB數據 </font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan="18"> 下面列出的數據就是筆者所用PC中的一部分中斷向量表。
</td>
<td></td><td></td><!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan="3">-d0:0 5F</td><td colspan="10" align="center">16進制形式的數據</td><td colspan="5" align="center">相應的ASCII碼</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan="2">0000:0000</td><td></td><td colspan="10">89 3E 7E BE B0 05 70 00-C3 E2 00 F0 B0 05 70 00</td><td></td><td colspan="4">.>~...p.......p.</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan="2">0000:0010</td><td></td><td colspan="10">B0 05 70 00 54 FF 00 F0-4C E1 00 F0 6F EF 00 F0</td><td></td><td colspan="4">..p.T...L...o...</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan="2">0000:0020</td><td></td><td colspan="10">76 18 B0 D3 88 20 B0 D3-6F EF 00 F0 6F EF 00 F0</td><td></td><td colspan="4">v.... ..o...o...</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan="2">0000:0030</td><td></td><td colspan="10">6F EF 00 F0 6F EF 00 F0-57 EF 00 F0 B0 05 70 00</td><td></td><td colspan="4">o...o...W.....p.</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan="2">0000:0040</td><td></td><td colspan="10">C4 21 B0 D3 4D F8 00 F0-41 F8 00 F0 EA 02 A7 B0</td><td></td><td colspan="4">.!..M...A.......</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan="2">0000:0050</td><td></td><td colspan="10">39 E7 00 F0 AE 03 71 02-01 06 AC B2 D2 EF 00 F0</td><td></td><td colspan="4">9.....q.........</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan="18"> 屏幕右邊所顯示的是和數據對應的ASCII字符,關于ASCII碼的知識第一章中有介紹。在中斷向量表中有一些向量為0,表示這個向量未使用。</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td>
<td colspan="9"><hr></td><td colspan="9"></td>
<td></td><td></td>
</tr>
<tr>
<td></td><td></td>
<td colspan="18"><font face="楷體_GB2312" size="2"><a name="note1">① INT指令是“萬能”的,它可以調用系統中任意一個中斷,不論這個中斷為誰服務。</a>
</font></td>
<td></td><td></td>
</tr>
<!頁腳線>
<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">www.nucstorm.com</a></i></td>
<td></td><td></td>
</tr>
</table>
<!導航條>
<p align="right"><a href="content1.html">目錄</a> <a href="page28.html">上一頁</a> <a href="page30.html">下一頁</a> <a href="page45.html">下一章</a></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -