通过这个程序,大家不仅可以掌握读取磁盘扇区的方法,同时这里面还有更深一层的问题。
-A100[Enter] 12A3:0100 MOV AH,00 ;复位软盘驱动器 12A3:0102 INT 13 12A3:0104 MOV AH,02 ;准备读取扇区 12A3:0106 MOV AL,01 ;读取一个扇区 12A3:0108 MOV CH,00 ;此扇区是0磁道的 12A3:010A MOV CL,01 ;第一扇区 12A3:010C MOV DH,00 ;此扇区在磁盘的0面 12A3:010E MOV DL,00 ;读取A驱 12A3:0110 MOV BX,0200 ;缓冲区首定为200H 12A3:0113 INT 13 ;读入数据 12A3:0115 INT 20 ;结束 12A3:0117 [Enter]
先在A驱动器中放一片软盘,而后运行这个程序,看看驱动器是否有动作。然后我们列出刚刚读入内存的数据:
-G=100[Enter] -d2000[Enter] 12A3:0200 EB 3C 90 4D 53 44 4F 53-35 2E 30 00 02 01 01 00 .<.MSDOS5.0..... 12A3:0210 02 E0 00 40 0B F0 09 00-12 00 02 00 00 00 00 00 ...@............ 12A3:0220 00 00 00 00 00 00 29 FC-10 13 18 4E 4F 20 4E 41 ......)....NO NA 12A3:0230 4D 45 20 20 20 20 46 41-54 31 32 20 20 20 FA 33 ME?FAT12?.3 12A3:0240 C0 8E D0 BC 00 7C 16 07-BB 78 00 36 C5 37 1E 56 .....|...x.6.7.V 12A3:0250 16 53 BF 3E 7C B9 0B 00-FC F3 A4 06 1F C6 45 FE .S.>|.........E. 12A3:0260 0F 8B 0E 18 7C 88 4D F9-89 47 02 C7 07 3E 7C FB ....|.M..G...>|. 12A3:0270 CD 13 72 79 33 C0 39 06-13 7C 74 08 8B 0E 13 7C ..ry3.9..|t....|
大家看到的内容可能与笔者给出的不一样,原因在于我们使用了不同的格式化程序。如果是使用MSDOS6.20所带的FORMAT程序格式化磁盘,而且保证系统无病毒入侵的情况下,那么大家应该看到笔者所给出的数据。 将准备好的几片磁盘依次放入驱动器中并运行此程序,如果这些磁盘确实使用同一程序做的格式化,那么就会发现在这些磁盘的0面0磁道的第一个扇区内存储着相同的内容。由此我们可以得出这样一个结论:当一片磁盘格式化完毕后,这片磁盘的0面0磁道第一个扇区内已经存储了数据,且用不同的程序进行格式化所存储的内容也有区别。 这一扇区内究竟存放的是什么东西,有什么作用呢?从D命令显示的结果来看这些数据中包含有DOS系统的两个隐含文件的文件名,还有一段英文信息。不知道这一段英文信息你是否见过,当我们使用一片不带DOS系统的软盘启动机器时,我们会看到这段信息。从这两点我们可以推断这些数据和操作系统有关。我们下面尝试用U命令将其反汇编,看看能得到些什么:
-U200[Enter] 121D:0200 EB3C JMP 023E 121D:0202 90 NOP 121D:0203 4D DEC BP 121D:0204 53 PUSH BX 121D:0205 44 INC SP 121D:0206 4F DEC DI 121D:0207 53 PUSH BX 121D:0208 352E30 XOR AX,302E 121D:020B 0002 ADD [BP+SI],AL 121D:020D 0101 ADD [BX+DI],AX 121D:020F 0002 ADD [BP+SI],AL 121D:0211 E000 LOOPNZ 0213 121D:0213 60 DB 60 121D:0214 09F9 OR CX,DI 121D:0216 0007 POP ES 121D:0217 000F ADD [BX],CL 121D:0219 0002 ADD [BP+SI],AL 121D:021B 0000 ADD [BX+SI],AL 121D:021D 0000 ADD [BX+SI],AL 121D:021F 0000 ADD [BX+SI],AL -U23E 252[Enter] 121D:023E FA CLI 121D:023F 33C0 XOR AX,AX 121D:0241 8ED0 MOV SS,AX 121D:0243 BC007C MOV SP,7C00 121D:0246 16 PUSH SS 121D:0247 07 POP ES 121D:0248 BB7800 MOV BX,0078 121D:024B 36 SS: 121D:024C C537 LDS SI,[BX] 121D:024E 1E PUSH DS 121D:024F 56 PUSH SI 121D:0250 16 PUSH SS 121D:0251 53 PUSH BX 121D:0252 BF3E7C MOV DI,7C3E
反汇编的结果看上去有些乱,不过仔细观察第一条指令和偏移023E处起始的指令可以看出,这是一段具有逻辑性的程序,并非是杂乱无章的指令。事实上这确是一段程序,而且是一段具有重要意义的程序。