汇编仿FDISK及PQMAGIC列出分区逻辑盘符的prw.asm实现
2007-11-13 09:31:21 来源:WEB开发网核心提示:PBS片断:0~2:JMP引导程序3~0AH:厂,sys_ver(BPB首)0BH~0CH:每扇bytes0DH:每簇扇数0EH~0FH:保留区扇数10H:FAT份数11H~12H:F16根目录32字节项的数目,F32:0.13H~14H:软盘,32M内硬盘:分区总扇数15H:介质,软盘:F0H,硬盘:F8H16H~1
PBS片断:
0~2:JMP引导程序
3~0AH:厂,sys_ver
(BPB首)0BH~0CH:每扇bytes
0DH:每簇扇数
0EH~0FH:保留区扇数
10H:FAT份数
11H~12H:F16根目录32字节项的数目,F32:0.
13H~14H:软盘,32M内硬盘:分区总扇数
15H:介质,软盘:F0H,硬盘:F8H
16H~17H:软盘,32M内硬盘:每FAT占用扇
18H~19H:每道扇数
1AH~1BH:磁头数
1CH~1FH:此分区之前隐藏扇数
20H~23H:32M外硬盘:分区总扇数
24H~27H:32M外硬盘:每FAT占用扇
40H:磁盘BIOS,1st硬盘:80H,软盘:0
47H~51H:vol
52H~59H:file_sys
软盘6.22的io.sys,最先分得簇,如目录项0基第13字,指向1e,此12BIT的项值,是1f0002,指明01f->020->...->fff链.
分区标识值:
闲置:0
DOS主分区:1,4,6,0bh,0ch,0eh
DOS扩展分区:5,0fh
非DOS分区:其它
笔者用P,对硬盘划分4个DOS主分区,再prw,读此盘(0:0:0)到文件0,用debug,改分区vol值为2,用prw,回写0到(0:0:0),P的分区info页,显vol对应XENIX.
释意,见"(7) 文"的FAT
若vol<20H,则高4位,1/0表示隐藏/非隐藏,后缀X,用于扩展i13接口.
各硬盘,均含0:0:1(chs)的1扇MBR,其偏移1be字节,连续存4个分区表.
各硬盘,最多1个DOS扩展分区,其内,能划分称为逻辑分区的数个DOS主分区,非DOS分区.
逻辑分区串成链.例如,vol=5的扩展分区E,先含1个DOS主分区D,后含1个非DOS分区N,则E的Front域值F,是E内的各逻辑分区位置基址,F指明扇区S1,而S1的偏移1be字节,是D的分区表,偏移1ce字节,其vol=0fh,表示DOS扩展分区,其Front域值,加上基址F,指明扇区S2,而S2的偏移1be字节,是N的分区表,偏移1ce字节,其vol=链尾0.
(4) 仿F$及P$,列出分区逻辑盘符:
盘符,C:~Z:列出.用F$,P$,能建数个逻辑分区
分区超过Z:符时,F$照列,P$不赋盘符,prw赋^符
活跃分区数>1时,引导错,但F$及prw照列,P$显错
F$,P$,依vol域,查以下3步,每步,查80h至83h:
(1) 查DOS主分区
若是,则查bootON是否80H,若是,此分区就占1个逻辑盘符,若无活跃主分区,表项在MBR首现的主分区,就占1个逻辑盘符.
例如,3硬盘,80h的第1,3分区是主分区,但第3分区活跃,则第3分区占盘符C:.而81h,只含DOS扩展分区,其上,含1个DOS主分区及1个非DOS分区;82h的第2,4分区是不活跃主分区,则最先在MBR中出现的第2分区,占盘符D:
(2) 查DOS扩展分区
按逻辑分区在链上次序,查它是否DOS主分区,若是,就占盘符,81h的DOS扩展分区上的DOS主分区,占盘符E:
(3) 查未占过盘符的DOS主分区及非DOS分区
按MBR中,分区表项出现的先后次序,查分区是否DOS主分区,若是,且它未占过盘符,就占盘符.80h的第1分区,占盘符F:,82h的第4分区,占盘符G:
F$,P$,prw,不给非DOS分区赋盘符,仅显In值.
更多精彩
赞助商链接