?? page208.html
字號:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第8章 文件句柄功能與磁盤</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="page207.html">上一頁</a> <a href="page209.html">下一頁</a> <a href="page238.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>-208-</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>
這里還有幾點我要提醒大家,凡是"[ ]"中的項都是可以省略的,DOS會按"當前情況"處理。另外,DOS不要求我們定義象"文件控制塊"那樣的數據結構,因此,ASCIIZ串可以放在內存中任意地方。同時,在存取文件時DOS也不需要我們定義DTA,不過DOS要求我們給出指向數據緩沖區的指針。簡而言之,有關FCB功能的那一套并未"傳染"給文件句柄功能。關于這些問題我們將在稍后做更深入的討論。<br>
有了這些初步的認識,我們下面所做的工作就是研究文件句柄功能的具體應用方法。表7-1給出了DOS提供的最常用的文件句柄功能調用,仿照前半章的內容,我們仍按照"打開關閉--讀出寫入--其它功能"的順序來分別討論。
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18 align=center><font face="楷體_GB2312">表7-1 文件句柄功能調用</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2 align=center>功能</td><td colspan=2 align=center>用途</td><td colspan=4 align=center>參數</td><td colspan=10 align=center>返回<td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2 align=center>3CH</td><td colspan=2 align=center>建立文件</td><td colspan=4>CX=文件屬性<br>DS:DX指向ASCIIZ串</td><td colspan=10>成功:CF標志清0,AX=文件句柄<br>失敗:CF標志置1,AX=錯誤代碼<sup>*</sup></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2 align=center>3DH</td><td colspan=2 align=center>打開文件</td><td colspan=4>AL=訪問方式<br>DS:DX指向ASCIIZ串</td><td colspan=10>成功:CF標志清0,AX=文件句柄<br>失敗:CF標志置1,AX=錯誤代碼</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2 align=center>3EH</td><td colspan=2 align=center>關閉文件</td><td colspan=4>BX=文件句柄</td><td colspan=10>成功:CF標志清0,AX=文件句柄<br>失敗:CF標志置1,AX=錯誤代碼</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2 align=center>3FH</td><td colspan=2 align=center>讀文件</td><td colspan=4>BX=文件句柄<br>CX=要讀入的字節數<br>DS:DX指向緩沖區</td><td colspan=10>成功:CF標志清0,AX=實際讀入的字節數<br>失敗:CF標志置1,AX=錯誤代碼</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2 align=center>40H</td><td colspan=2 align=center>寫文件</td><td colspan=4>BX=文件句柄<br>CX=要寫的字節數<br>DS:DX指向緩沖區</td><td colspan=10>成功:CF標志清0,AX=實際寫出的字節數<br>失敗:CF標志置1,AX=錯誤代碼</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2 align=center>41H</td><td colspan=2 align=center>刪除文件</td><td colspan=4>BX=文件句柄</td><td colspan=10>成功:CF標志清0 失敗:CF標志置1</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2 align=center>42H</td><td colspan=2 align=center>移動文件讀寫指針</td><td colspan=4>AL=方式代碼<br>BX=文件句柄<br>CX:DX=偏移值</td><td colspan=10>成功:CF標志清0,DX:AX=新的文件指針<br>失敗:CF標志置1,AX=錯誤代碼</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18><font face="楷體_GB2312">
* 注:錯誤代碼在后面討論。
</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
在這一節我們主要討論文件的打開與關閉功能,借此以加深對文件句柄功能的理解。請大家把我們的老朋友--DEBUG搬入內存,并用"A"命令輸入下面這段小程序:
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
C:\ASM\>DEBUG[Enter]<br>
-a100[Enter]
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=3>
123D:0100<br>
123D:0102<br>
123D:0111<br>
123D:0119<br>
123D:0124<br>
123D:0127<br>
123D:012A<br>
123D:012C<br>
123D:012E<br>
123D:0130<br>
123D:0133<br>
123D:0135<br>
123D:0137<br>
123D:0139
</td>
<td colspan=2>
JMP<br>
DB<br>
DB<br>
DB<br>
MOV<br>
MOV<br>
INT<br>
JB<br>
MOV<br>
MOV<br>
MOV<br>
INT<br>
JMP<br>
MOV
</td>
<td colspan=5>
0124<br>
'C:\COMMAND.COM',0<br>
'OK...',0D,0A,24<br>
'ERROR...',0D,0A,24<br>
AX,3D00<br>
DX,0102<br>
21<br>
0139<br>
BX,AX<br>
DX,0111<br>
AH,09<br>
21<br>
0140<br>
DX,0119
</td>
<td colspan=8>
;跳過數據區<br>
;定義一個ASCIIZ串<br>
;程序執行正確的信息<br>
;程序出錯信息<br>
;按讀方式打開文件<br>
;DX指向ASCIIZ串<br>
;打開文件<br>
;出錯,轉0139<br>
;文件句柄送入BX寄存器<br>
;顯示程序正確執行的信息<br>
<br>
<br>
;轉0140結束進程<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="page207.html">上一頁</a> <a href="page209.html">下一頁</a> <a href="page238.html">下一章</a></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -