⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 page176.html

📁 李春生的汇编书籍
💻 HTML
字号:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第7章 文件控制块</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="page175.html">上一页</a> <a href="page177.html">下一页</a> <a href="page207.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>-176-</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>
  打开文件只能对磁盘上已经存在的文件进行操作,如果我们想在磁盘上建立一个新的文件,那么我们应该使用21H中断的16H功能。这个功能所要传递的参数和0FH功能一致,返回的结果也和OFH功能相同,大家可以将程序FCB1.ASM中的指令"MOV AH,0FH"改为"MOV AH,16H",即可构成一个用于观察16H功能的程序。<br>
  为了避免不必要的损失,我们在执行或跟踪这个程序之前需要讨论一下建立文件时要注意的一些东西。这个功能调用是在当前目录下新建一个目录项并使相应的FCB处于打开状态,所以使用这个功能后无需再用0FH功能。很重要的一点,如果我们建立的文件恰好和磁盘上已存在的某个文件重名,那么执行此操作后磁盘上己有的文件其长度将被置成0,如果对这个文件执行写操作,那么旧的内容将被新内容覆盖。所以在执行或跟踪这个程序之前请确认当前目录下没有CONFIG.SYS,否则下次启动系统时恐怕就要出麻烦。下面我们就来跟踪这个程序:
</td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=18>C:\ASM\>DEBUG FCB1.EXE[Enter]</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=18>G=0 C[Enter]</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=2>AX=1600</td><td colspan=2>BX=0000</td><td colspan=2>CX=004F</td><td colspan=2>DX=0000</td><td colspan=2>SP=0000</td><td colspan=2>BP=0000</td><td colspan=2>SI=0000</td><td colspan=2>DI=0000</td><td colspan=2></td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=2>DS=2589</td><td colspan=2>ES=2579</td><td colspan=2>SS=2589</td><td colspan=2>CS=258C</td><td colspan=2>IP=000C</td>
<td colspan=5>NV UP EI PL NZ NA PO NC</td><td colspan=3></td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=2>258C:000C</td><td colspan=2>0AC0</td><td colspan=6>OR AL,AL</td><td colspan=4></td><td colspan=4></td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=2>-d0 24</td><td colspan=4><font face="楷体_GB2312" size=2>当前驱动器为"C:"</font></td><td colspan=12><font face="楷体_GB2312" size=2>文件名及扩展名</font></td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=2>2589:0000</td><td colspan=10>03 43 4F 4E 46 49 47 20-20 53 59 53 <u>00 00 80 00</u></td><td></td><td colspan=5>.CONFIG&nbsp;&nbsp;SYS....</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=2>2589:0010</td><td colspan=10><u>00 00 00 00 46 21 CD 8B-40 02 42 00 00 61 B8 0F</u></td><td></td><td colspan=5>....F!..@.B..a..</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=2>2589:0020</td><td colspan=10><u>00 00 00 00 00</u></td><td></td><td colspan=5>.....</td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
  跟踪结果和0FH功能几乎一样,不过DOS返回到FCB中的数据有很多与0FH功能不同,比如建立文件的时间和日期,大家可以自己分析一下日期和时间,对对手表,看看是否一致。<br>
  继续将这个程序执行完,然后退出DEBUG,再次执行DIR操作,看看当前目录下是否出现了一个长度为0的新文件。<br>
  在扩展FCB的支持下,这个功能还可以建立具有特定属性的文件,继续修改FCB1.ASM,将数据段定义改为下面的形式(代码段不变):
</td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=2>
DATA<br>
<br>
MY_FCB<br>
<br>
<br>
ATTRIB<br>
DRIVE<br>
FILE_NAME<br>
EXT_NAME<br>
CUR_BLOCK<br>
REC_SIZE<br>
FILE_SIZE<br>
CREA_DATE<br>
</td>
<td colspan=2>
SEGMENT<br>
ASSUME<br>
LABEL<br>
DB<br>
DB<br>
DB<br>
DB<br>
DB<br>
DB<br>
DW<br>
DW<br>
DW<br>
DW<br>
</td>
<td colspan=5>
<br>
DS:DATA<br>
BYTE<br>
-1<br>
5 DUP (0)<br>
1<br>
0<br>
'CONFIG  '<br>
'SYS'<br>
?<br>
?<br>
2 DUP(?)<br>
?<br>
</td>
<td colspan=9>
<br>
<br>
<br>
;扩展的FCB起始<br>
<br>
<br>
;驱动器号,0:当前  1:A  2:B  ...<br>
;文件名<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 &copy; 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="page175.html">上一页</a> <a href="page177.html">下一页</a> <a href="page207.html">下一章</a></p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -