ITEEDU

我们说这一类磁盘不"正常",最常见的现象就是它们不能进行常规的DISKCOPY。原因在于标准的磁盘复制软件(DISKCOPY、PCTOOLS)无法正确拷贝这些特殊容量的扇区。这种磁盘完全是人为的用一些特殊的方法格式化而成,常用于装载一些商品软件。习惯上我们把这类磁盘称为"加密盘",加密是计算机技术中一个很重要也很有趣的专项内容,大家可以参阅其它书籍自行研究这门学问,在本书中不做深入讨论。

不同的磁盘之所以有不同的容量原因在于它们具有不同的磁道数和扇区数。值得注意的是每个扇区的容量都是512个字节,连硬盘也不例外。举360K倍密磁盘为例,它的一个面上划分了40条磁道,每条磁道上分成9个扇区,所以两个面共有扇区数为2′40′9=720个,总共可以容纳512′720=368640个字节的数据,恰好是368640/1024=360K;而1.44M的3寸盘的一个面上有80条磁道,每条磁道划分了18个扇区,总容量为512′2′80′18=1474560个字节,恰为1440K。

说到这里细心的读者可能马上会发现问题,当使用FORMAT程序格式化一片360K的磁盘后,程序报告磁盘的总容量为362496个字节,比实际容量少了6144个字节,合12个扇区;而格式化1.44M磁盘后程序报告的总容量为1457664个字节,比实际容量少33个扇区。这看起来好象有些怪异,实际上FORMAT程序"遗失"的这些扇区在DOS的文件管理环节中占有重要的地位,它们不能由用户保存数据用,而是由操作系统专用,保存有关文件的重要的特征信息。这些扇区集中于磁盘的"零"磁道上,我们常称其为"系统保留扇区"。

磁盘上的任一个扇区均可以用"面"、"磁道"、"扇区"三个参数进行定位,我们现在使用的软盘都是双面存储的,早期的单面磁盘已经淘汰。驱动器都有两个磁头,对应磁盘的两个面儿,这两个磁头的编号为0和1,在编程时我们可以通过指定磁头的方式存取任意一个面儿上的某个扇区,具体说究竟哪个磁头是0哪个是1这倒无关紧要。

磁道的编号是由0开始,360K磁盘磁道编号由0至39,720K、1.2M、1.44M磁盘的磁道编号为0-79,共80条。编号为0的磁道在磁盘的最外一圈,由外向内顺次排列。这里又有一个微妙的问题,不同的磁道周长不一样,而其容量却都一样,每条磁道包含的扇区数相同,这样看来越靠近内圈(磁道编号越大)的磁道其数据存储就越"紧凑"。

我们知道"数据"落实到磁盘上都是一些磁性信号,这些磁信号相邻的越"紧",在存取时相互干扰就越严重。因此越靠近内圈的磁道数据的存取就越困难,所以磁道不能过于靠近磁盘内圈。

一片磁盘的永久标签上都印有48TPI、96TPI这样的文字,其含义是每一英寸直径上所能容纳的磁道数(Track Per Inch)。360K磁盘每一英寸直径上可以容纳48条磁道,磁盘上开的磁头读写窗口长度也比英寸要大,所以原则上这片磁盘可以格式化为48条磁道,不过内圈的8条磁道并没有使用,原因就是笔者前面所说的那样,内圈的磁道读写不很可靠。

每一条磁道的扇区编号是由1开始的,在编程时应指明所存取的扇区位于磁盘的哪个面儿(即磁头号0、1),哪条磁道(0-39)的哪个(或哪几个)扇区。

为方便编程,PC系统为程序设计者提供了一组功能调用,即"INT 13H"中断。其中断服务程序位于BIOS内,并非由DOS提供。这个中断提供了许多有关磁盘的服务,最常用的是前6项,即磁盘复位、取驱动器状态、扇区读写、校验与格式化磁道。本书只把最常用的几项功能作一些简要介绍,使大家对软硬盘的逻辑结构和编程控制方法有初步了解,而更深入的内容需参考其它相关书籍。先来讨论驱动器复位和扇区读写这三项功能(见表8-4):

表8-4 INT 13H中断部分功能
功能号 功能说明调用参数 返回信息
00H 复位软磁盘系统,为下一步操作做准备AH=00H
01H 取软磁盘控制器的状态AH=01H AH=状态字节*
02H 读取一个或几个扇区的数据到内存缓冲区AH=02H
AL=读取的扇区数
ES:BX=内存缓冲区首
CH=磁道号,CL=扇区号
DH=磁头号,DL=驱动器号
成功:CF=0
      AL=实际读取的
      扇区数
失败:CF=1
      AH=状态字节
03H 将内存中的数据写入磁盘上指定的一个或几个连续的扇区中AH=03H
AL,ES:BX,CH,CL,DH,DL的内容与02H功能一样
同02H功能
04H 校验磁盘指定的扇区AH=04H
AL=校验的扇区数
CH,CL,DH,DL的内容与02H功能一样
同02H功能
05H 格式化软盘的指定磁道AH=05H
ES:BX=存放扇区地址信息的缓冲区
CH,DH,DL的内容与02H功能一样,CL未用
同02H功能
  注*:01-04功能返回的状态字节均相同。

 磁盘复位功能的主要作用是使驱动器进入就绪状态,为进一步的存取操作做好准备。它一般用于真正进行数据存取操作之前,有时磁盘读写出错需要重新读写时也先使用此功能令磁盘驱动器复位。扇区读写这两项功能是最为常用的,有一点需要说明的就是DL寄存器中的参数,这个参数指明了程序所要读写的物理驱动器号。软盘驱动器编号为0和1,对应驱动器A和B;硬盘的编号为80H和81H,对应物理硬盘C和D。有一些电脑中可能有符号为E、F或G之类的"硬盘",请注意那些并非是"物理"驱动器,而是由FDISK程序从一个硬盘上划分出来的"逻辑"驱动器。它们在硬盘上占据一部分空间,DOS虽然给它们分配了驱动器符号,但实际上这些驱动器都是存在于同一个硬盘上的不同的区域。因此我必须提醒你注意这样一点:除非你真正打开过机箱看到机器内确实安装了两个或更多的硬盘,否则不要试图对编号为81H或82H之类的驱动器进行操作。切记物理盘与逻辑盘是有区别的。 下面这个小程序演示了前述三项功能的应用,它可以读取A驱动器软盘上0面0磁道第一个扇区的内容。

笔者建议大家预先格式化一些磁盘备用,而且最好使用同一个程序作格式化。