扇区=128*(2的N次方) 磁道=柱面 容量=磁头×磁道×每道扇区×每扇区字节 簇是DOS最小单位,。当创建一个很小的文件时,如是一个字节,则它在磁盘上并不是只占一个字节的空间,而是占有整个一簇。DOS视不同的存储介质(如软盘,硬盘),不同容量的硬盘,簇的大小也不一样。簇的大小可在称为磁盘参数块(BPB)中获取。簇的概念仅适用于数据区。簇是DOS进行分配的最小单位,不同的存储介质,不同容量的硬盘,不同的DOS版本,簇的大小也不一样。 物理扇区编号(柱面/磁头/扇区,起始柱面0,起始磁头0,起始扇区1,bios内置中断程序) 绝对扇区编号(数字,起始扇区为0,普通人的编法) DOS扇区编号(数字,起始扇区为0,操作系统采用) 逻辑扇区(同上) 绝对扇区以及相对扇区又叫DOS扇区只是一个数字 使用相对扇区编号时,DOS是从柱面0磁头1扇区1开始,柱面0磁头0扇区1-柱面0磁头0扇区17(设每磁道17个扇区)没有相对扇区又叫DOS扇区编号,只能调用BIOS访问。 第一个DOS扇区编号为0,该磁道上剩余的扇区编号为1到16(设每磁道17个扇区),然后是磁头号为2,柱面为0的17个扇区,形成的DOS扇区号从17到33。直到该柱面的所有磁头。然后再移到柱面1,磁头1,扇区1继续进行DOS扇区的编号,即按扇区号,磁头号,柱面号(磁道号)增长的顺序连续地分配DOS扇区号。 DH:第一个DOS扇区的磁头号 DC:第一个DOS扇区的柱面号 DS:第一个DOS扇区的扇区号 NS:每磁道扇区数 NH:磁盘总的磁头数 则某扇区(柱面C磁头H扇区S)的相对扇区号RS为: RS=(C-DC)×NH×NS+NS(H-DH)+(S-DS) 若已知RS,DC,DH,DS,NS和NH则 S=(RS MOD NS)+DS H=((RS DIV NS)MOD NH)+DH C=((RS DIV NS)DIV NH)+DC DOS磁盘区域的划分 高级格式化好的硬盘,整个磁盘按所记录数据的作用不同可分为主引导记录(MBR:Main Boot Record),Dos引导记录(DBR:Dos Boot Record),文件分配表(FAT:File Assign Table),根目录(BD:Boot Directory)和数据区。前5个重要信息在磁盘的外磁道上,原因是外圈周长总大于内圈周长,也即外圈存储密度要小些,可靠性高些。 MBR位于硬盘第一个物理扇区(绝对扇区)柱面0,磁头0,扇区1处。由于DOS是由柱面0,磁头1,扇区1开始,故MBR不属于DOS扇区,DOS不能直接访问。MBR中包含硬盘的主引导程序pre-boot和硬盘分区表dpt和55aa组成。分区表有4个分区记录区。记录区就是记录有关分区信息的一张表。它从主引导记录偏移地址01BEH处连续存放,每个分区记录区占16个字节。 硬盘的0柱面、0磁头、1扇区称为主引导记录MBR,该记录占用512个字节,它用于硬盘启动时将系统控制权转给用户指定的的某个活动主分区。 MBR的内容是在硬盘分区时由分区软件(如FDISK)写入该扇区的,MBR不属于任何一个操作系统,不随操作系统的不同而不同,即使不同,MBR也不会掺杂操作系统的性质,具有公共引导的特性。但安装某些多重引导功能的软件或LINUX的LILO时有可能改写它;它先于所有的操作系统被调入内存并发挥作用,然后才将控制权交给活动主分区内的操作系统。 MBR由三部分构成: 1.主引导程序pre-boot代码,占446字节 2.硬盘分区表DPT,占64字节 3.主引导扇区结束标志AA55H占2个字节 1.主引导程序代码从偏移0000H开始到偏移01BDH结束的446字节;主引导程序代码包括一小段执行代码。启动PC 机时,系统首先对硬件设备进行测试,成功后进入自举程序INT 19H;然后读系统磁盘0柱面、0磁头、1扇区的主引导扇区MBR的内容到内存指定单元0:7C00 首地址开始的区域,并执行MBR程序段。 主引导代码实现下列功能: 1.扫描分区表查找活动分区; 2.寻找活动分区的起始扇区; 3.将活动分区的引导扇区读到内存; 4.执行引导扇区的运行代码。 如果主引导代码未完成这些功能,系统显示下列错误信息: Invalid partition table Error loading operating system Missing operating system 二、硬盘分区表DPT是从偏移01BEH开始到偏移01FDH结束的64字节; 硬盘分区表分为四小部分,每一小部分表示一个分区的信息,占16字节。在这里我们可以看出,硬盘的总分区数为什么不能大于4。其中可激活分区数不得大于3,扩展分区数不得大于1,当前活动分区数必须小于等于1。分区表的每一分区的第0个字节是自举标志,其值为80H时,表示该分区是当前活动分区,可引导,其值为00H时,表示该分区不可引导。第4字节是分区类型。每一分区的第1至第3字节是该分区起始地址。其中第1字节为起始磁头号(面号);第2字节的低6位为起始扇区号,高2位则为起始柱面号的高2位;第3字节为起始柱面号的低8位。因此,分区的起始柱面号是用10位二进制数表示的,最大值为2^10 = 1024,因逻辑柱面号从0开始计,故柱面号的显示最大值为1023。同理,用6位二进制数表示的扇区号不会超过2^6 - 1 = 63;用8位二进制数表示的磁头号不会超过2^8 - 1 = 255。每一分区的第5至第7字节表示分区的终止地址,各字节的释义与第1至第3字节相同。这里我们假设一种极端的情况:如果让第5至第7字节的所有二进制位都取1,就获得了柱面号、磁头号和扇区号所能表示的最大值,从而得到最大绝对扇区号为:1024 × 256 × 63 = 16,515,072这个扇区之前的所有物理扇区所包含的字节数为:16,515,072 × 512Bytes ≈ 8.46×109Bytes = 8.46GB。 由此可知硬盘的容量设计为什么会有8.4GB这一档,分区表每一分区的第1至第3字节以及第5至第7字节的数据结构已经不能满足大于8.46GB的大容量硬盘的需要。考虑到向下兼容的需要,业界并未对从DOS时代就如此定义的硬盘分区表提出更改意见,否则改动所牵涉的面太广,会造成硬件和软件发展上的一个断层,几乎无法被业界和用户所接受。硬盘厂商解决这一问题的方法是定义了新的INT 13服务扩展标准。新的INT 13服务扩展标准不再使用操作系统的寄存器传递硬盘的寻址参数,而使用存储在操作系统内存里的地址包。地址包里保存的是64位LBA地址,如果硬盘支持LBA寻址,就把低28位直接传递给ATA接口,如果不支持,操作系统就先把LBA地址转换为CHS地址,再传递给ATA接口。通过这种方式,能实现在ATA总线基础上CHS寻址的最大容量是136.9 GB,而LBA寻址的最大容量是137.4GB。新的硬盘传输规范ATA 133规范又把28位可用的寄存器空间提高到48位,从而支持更大的硬盘。分区表每一分区的第8至第11字节表示该分区的起始相对扇区数(即该扇区之前的绝对扇区个数),高位在右,低位在左;第12至第15字节表示该分区实际占用的扇区数,也是高位在右,低位在左;分区表这类数据结构的表达方式与机器中数据的实际存储方式在顺序上是一致的,即低位在前,高位在后。因此,在从16进制向十进制作数值转换时,需将字段中的16进制数以字节为单位翻转调位,用4个字节可以表示最大2^32个扇区,即2TB=2048GB。系统在分区时,各分区都不允许跨柱面,即均以柱面为单位,这就是通常所说的分区粒度。在未超过8.4GB的分区上,C/H/S的表示方法和扇区数的表示方法所表示的分区大小是一致的。超过8.4GB的/H/S/C一般填充为FEH/FFH/FFH,即C/H/S所能表示的最大值;有时候也会用柱面对1024的模来填充。不过这几个字节是什么其实都无关紧要了。扩展分区中的每个逻辑驱动器都存在一个类似于MBR的扩展引导记录(Extended Boot Record,EBR)。扩展引导记录包括一个扩展分区表和扇区结束标志55AA。一个逻辑驱动器中的引导扇区一般位于相对扇区32或63。如果磁盘上没有扩展分区,那么就不会有扩展引导记录和逻辑驱动器。第一个逻辑驱动器的扩展分区表中的第一项指向它自身的引导扇区;第二项指向下一个逻辑驱动器的EBR,如果不存在进一步的逻辑驱动器,第二项就不会使用,而被记录成一系列零。如果有附加的逻辑驱动器,那么第二个逻辑驱动器的扩展分区表的第一项会指向它本身的引导扇区,第二个逻辑驱动器的扩展分区表的第二项指向下一个逻辑驱动器的EBR。扩展分区表的第三项和第四项永远都不会被使用。扩展分区表项中的相对扇区数是从扩展分区开始的扇区到该逻辑驱动器中第一个扇区的扇区数;占用的扇区数是指组成该逻辑驱动器的扇区数目。 有时候在磁盘的末尾会有剩余空间,由于分区是以1柱面的容量为分区粒度的,那么如果磁盘总空间不是整数个柱面的话,不够一个柱面的剩下的空间就是剩余空间了,这部分空间并不参与分区,所以一般无法利用。 三、主引导扇区的最后两个字节(偏移1FEH和偏移1FFH),其值为AA55H,它表示该扇区是个有效的引导扇区,可用来引导硬磁盘系统。 分区引导扇区DBR(DOS BOOT RECORD)是由FORMAT高级格式化命令写到该扇区的内容;DBR是由硬盘的MBR装载的程序段。DBR装入内存后,即开始执行该引导程序段,其主要功能是完成操作系统的自举并将控制权交给操作系统。每个分区都有引导扇区,但只有被设为活动分区的DBR才会被MBR装入内存运行。 DBR主要由下列几个部分组成: 1.跳转指令,占用3个字节的跳转指令将跳转至引导代码。 2.厂商标识和DOS版本号,该部分总共占用8个字节。 3.BPB(BIOS Parameter Block, BIOS 参数块)。 4.操作系统引导程序。 5.结束标志字,结束标志占用2个字节,其值为AA55 DBR中的内容除了第5部分结束标志字固定不变之外,其余4个部分都是不确定的,其内容将随格式化所用的操作系统版本及硬盘的逻辑盘参数的变化而变化。 一、FAT32的分区引导扇区 为了使加载文件的操作更加灵活,加上FAT32文件系统采用"活动"的FDT表,,同时考虑到引导程序的代码量和为今后发展保留适当的余量,FAT32文件系统分区引导扇区占据了6个扇区,只有前3个扇区作为系统的分区引导扇区,其余3个扇区保留暂未使用。分区引导扇区对于操作系统的启动和磁盘文件的访问具有至关重要的作用;引导程序代码的损坏将导致操作系统不能正常启动,磁盘读写参数的破坏将造成存储在磁盘上的文件不能正常读写。 由于分区引导扇区的重要性,FAT32文件系统在在第一个分区引导扇区的6个扇区后的6个扇区里保留了分区引导扇区的备份,在启动时操作系统可以对两份引导扇区进行比较,以便选择正确的引导扇区来引导系统。由于在磁盘正常工作过程中系统不再对引导扇区的程序和数据进行修改,因此备份的分区引导扇区损坏的可能性非常小。 分区引导扇区的第一个扇区的前三个字节是一条跳转指令,然后是8个字节长的OEM ID(厂家标识)和版本号,其后是简称为BPB的BIOS参数块(BIOS Parameter Block)。对于FAT32其各部分的意义如下表: 偏移地址 长度(字节) 意义 0BH 2 每个扇区的字节数,常取512。 0DH 1 每簇扇区数;可以是1, 2, 4, 8, 16, 32, 64, 128,取决于文件系统格式及分区大小。 0EH 2 为操作系统保留的扇区数;FAT32时多为十进制的32,FAT16时为1,有的格式化工具可能将它设为36或63。 10H 1 FAT表的个数;常取2。 11H 2 在FAT16中存放系统根目录中允许登记的目录项个数,FAT32中用于标注系统采用的是否为FAT32文件系统。其值为0000H表示磁盘使用FAT32文件系统。 13H 2 值为00H,为保持兼容性而保留,未使用。 15H 1 磁盘介质标志,硬盘为F8。 16H 2 未使用,值为00H。 18H 2 每个磁道的扇区数。 1AH 2 磁盘的磁头数。 1CH 4 分区前隐藏扇区的个数。 20H 4 逻辑磁盘中的扇区总数。 24H 4 每个FAT表所占的扇区数。 28H 2 FAT表镜像标志,值为0表示系统保存2份互为备份的FAT表,值为1表示系统仅保存1份FAT表。 2AH 2 文件系统的主次版本(保留)。 2CH 4 磁盘根目录的起始簇号。 30H 2 文件系统参数的扇区号,通常位于引导扇区的下一个扇区。 32H 2 备份分区引导扇区的逻辑扇区号。 34H 12 保留,未使用。 40H 1 中断13呼叫的预设值,指明访问的设备;软盘为00H,硬盘为80H。 41H 1 用于中断13呼叫。 42H 1 磁盘读写参数扩展标志,其值为29H。 43H 4 格式化时随机产生的磁盘卷的序列号。 47H 11 格式化时人工输入的磁盘卷标号。 52H 8 文件系统的标识号(FAT32)。 从偏移0x5A开始的数据为操作系统引导代码。这是由偏移0x00开始的跳转指令所指向的,此段指令在不同的操作系统上和不同的引导方式上,其内容也是不同的。 扇区的最后两个字节存储值为0x55AA的DBR有效标志,对于其他的取值,系统将不会执行DBR相关指令。 分区引导扇区的第2个扇区作为文件系统相关参数存储标识扇区(图七), 除了保存扇区的标识信息(RraA(00H)和rrAa(1E4H))外,还可能在偏移地址1E8H处存储了文件系统有关的信息。其中扇区偏移地址1E8H~1EBH的4个字节存储了逻辑磁盘中未使用的簇数,通常用于快速计算逻辑磁盘的剩余空间(典型的操作是在资源管理器状态栏上列出的"可用磁盘空间"参数),而1ECH~1EFH 4个字节给出了逻辑盘中下一个可以分配给文件使用的空闲簇的簇号,这样操作系统可以不访问FAT表就直接获得磁盘剩余空间和可以分配的簇号。 分区引导扇区的第3个扇区则存储了引导扇区的后一部分引导系统的程序代码(图八)。 二、NTFS的分区引导扇区 对于NTFS分区来说,分区引导扇区DBR只占用一个扇区(图五),并且在该分区的最后一个扇区做了备份;NTFS的引导扇区也是完成引导和定义分区参数,NTFS分区的引导扇区不是分区的充分条件,它要求必须MFT中的系统记录如$MFT等正常该分区才能正常访问。其BPB参数如下表所示: 偏移地址 长度(字节) 常用值 意 义 0x0B 2 0x0002 每扇区字节数 0x0D 1 0x08 每簇扇区数 0x0E 2 0x0000 保留扇区 0x10 3 0x000000 总为0 0x13 2 0x0000 NTFS未使用,为0 0x15 1 0xF8 介质描述 0x16 2 0x0000 总为0 0x18 2 0x3F00 每磁道扇区数 0x1A 2 0xFF00 磁头数 0x1C 4 0x3F000000 隐藏扇区数 0x20 4 0x00000000 NTFS未使用,为0 0x28 8 0x4AF57F0000000000 扇区总数 0x30 8 0x0400000000000000 $MFT的逻辑簇号 0x38 8 0x54FF070000000000 $MFT Mirr的逻辑簇号 0x40 4 0xF6000000 每MFT记录簇数 0x44 4 0x01000000 每索引簇数 0x48 8 0x14A51B74C91B741C 卷标 0x50 4 0x00000000 检验和 [ 本帖最后由 伐木者 于 2007-6-19 20:11 编辑 ] 附件: 您所在的用户组无法下载或查看附件本文来自:创幻论坛 http://www. UID55456帖子9783 精华45 积分47222 威望0 金币0 阅读权限18 性别男 来自有树砍的地方 在线时间8494 小时 注册时间2004-5-16 最后登录2010-4-5 查看详细资料 TOP 【推荐】权威专家推荐涨停股票请点击获取 伐木者 魏武王常所用论坛 超级版主 电脑家园区总版主 积分47222 威望0 注册时间2004-5-16 发短消息 加为好友 沙发 大 中 小 发表于 2007-6-17 20:55 只看该作者 How It Works --- Master Boot Record (主启动记录) 本文是介绍MBR的反编译程序的。MBR是放在硬盘的0柱面,0磁头(head),1扇区的 那一段区。MBR是由FDISK程序创建的。所有操作系统的FDISK程序都会创建类似的MBR 记录。MBR是多个分区的前提,每个MBR中包括了四个分区表记录。在您的计算机加电 之后,INT19被调用了。一般来说,INT19先从第一个软盘驱动器中读启动扇区记录。 如果在软盘中找到了启动的扇区,那么这个扇区的数据就被读入到内存的0000:7c00 地址上,INT19也跳到了这个地址上。但是,如果没有在软盘中找到这个扇区的话,INT 19就从第一个硬盘中去读。同样,如果成功的话,也会把MBR导入到相同的内存地址 0000:7c00,INT19也会跳这个地址。MBR中包括的一段小程序是定出在分区表中的活动分 区。这样的活动分区找到之,那个分区的启动扇区也被读入到0000:7c00地址,MBR程序 也转移到了这个地址。每一个操作系统都有固定的启动扇区的格式。在启动扇区里的程 序要能定出操作系统启动程序的位置(或是核心本身,或者是一个启动管理器),然后 将它读入内存。 另:在Ctrl-Alt-Del键被按下时,INT19也会被调用。在大多数系统中,Ctrl-Alt-Del三?nbsp; 键同时按下表示热启动您的计算机,回到INT19调用前的状态。 ===== 数据存放的位置: MBR程序放在偏移为0000的位置。 MBR消息放在偏移为008b的位置。 分区表放在偏移为00be的位置。 签名放在偏移为00fe的位置。 关于谁干什么事的总结: 如果一个活动分区找到了,这个分区的启动数据被读入到0000:7c00的位置,MBR程 序也跳到0000:7c00的位置。这段程序找到指向分区表的入口,入口描述的是这段分区是 怎样被启动的。启动程序用这些数据来决定用来启动的驱动器和这个驱动器分区在硬盘上 的位置。 如果没有找到这样的活动分区入口,ROM BASIC会转入INT 18的调用。所有其他的错 误导致系统的挂起,可以看HANG的标记。 注意(非常之重要): 1)活动分区入口的第一个字节的内容是80h。在INT13被调用之前,这个字节被导 入到DL寄存器中。当INT13被调用时,DL表示的是BIOS的设备号码。因为这个原因,由MBR 程序读的启动扇区只能从BIOS设备号码为80的硬盘中读入。这便是为什么不能从任何硬盘 启动的原因。?nbsp; 2)MBR程序是用基于INT 13h (ah=02h)的中断的CHS来读取活动分区的启动扇区位置 的。活动分区的启动扇区内的位置是在分区表内用CHS格式表明的。如果这个驱动器小于 528M,这个CHS一定要是(L-CHS,见BIOS TYPES文档)。在LBA中没有任何地址是有用的。 (另一个LBA不能解决>528M问题的原因) 这点大家别信,西西。 ==== 这是一张整个MBR记录的表(hex 和ascii格式) OFFSET 0 1 2 3 4 5 6 7 8 9 A B C D E F *0123456789ABCDEF* 000000 fa33c08e d0bc007c 8bf45007 501ffbfc *.3.....|..P.P...* 000010 bf0006b9 0001f2a5 ea1d0600 00bebe07 *................* 000020 b304803c 80740e80 3c00751c 83c610fe *...<.t..<.u.....* 000030 cb75efcd 188b148b 4c028bee 83c610fe *.u......L.......* 000040 cb741a80 3c0074f4 be8b06ac 3c00740b *.t..<.t.....<.t.* 000050 56bb0700 b40ecd10 5eebf0eb febf0500 *V.......^.......* 000060 bb007cb8 010257cd 135f730c 33c0cd13 *..|...W.._s.3...* 000070 4f75edbe a306ebd3 bec206bf fe7d813d *Ou...........}.=* 000080 55aa75c7 8bf5ea00 7c000049 6e76616c *U.u.....|..Inval* 000090 69642070 61727469 74696f6e 20746162 *id partition tab* 0000a0 6c650045 72726f72 206c6f61 64696e67 *le.Error loading* 0000b0 206f7065 72617469 6e672073 79737465 * operating syste* 0000c0 6d004d69 7373696e 67206f70 65726174 *m.Missing operat* 0000d0 696e6720 73797374 656d0000 00000000 *ing system......* 0000e0 00000000 00000000 00000000 00000000 *................* 0000f0 TO 0001af SAME AS ABOVE 0001b0 00000000 00000000 00000000 00008001 *................* 0001c0 0100060d fef83e00 00000678 0d000000 *......>....x....* 0001d0 00000000 00000000 00000000 00000000 *................* 0001e0 00000000 00000000 00000000 00000000 *................* 0001f0 00000000 00000000 00000000 000055aa *..............U.* ==== 这是MBR的反编译程序: 这个扇区被导入到内存的0000:7c00位置,但是它又马上将自己重定位到0000:0060的 位?nbsp; 。 BEGIN: # NOW AT 0000:7C00, RELOCATE 0000:7C00 FA CLI #禁止中断 0000:7C01 33C0 XOR AX,AX #设置堆栈段地址为0000 0000:7C03 8ED0 MOV SS,AX 0000:7C05 BC007C MOV SP,7C00 #设置堆栈指针为7c00 0000:7C08 8BF4 MOV SI,SP #SI = 7c00 0000:7C0A 50 PUSH AX 0000:7C0B 07 POP ES #ES = 0000:7c00 0000:7C0C 50 PUSH AX 0000:7C0D 1F POP DS #DS = 0000:7c00 0000:7C0E FB STI #开中断 0000:7C0F FC CLD #清除方向 0000:7C10 BF0006 MOV DI,0600 #DI = 0600 0000:7C13 B90001 MOV CX,0100 #移动 256 个word (512 bytes) 0000:7C16 F2 REPNZ #把 MBR 从 0000:7c00 0000:7C17 A5 MOVSW #移动到0000:0600 0000:7C18 EA1D060000 JMP 0000:061D #跳至NEW_LOCATION NEW_LOCATION:# NOW AT 0000:0600 0000:061D BEBE07 MOV SI,07BE #指向入口的第一个字节 0000:0620 B304 MOV BL,04 #有4个入口 SEARCH_LOOP1: # 查找活动分区 0000:0622 803C80 CMP BYTE PTR [SI],80 #是不是活动分区? 0000:0625 740E JZ FOUND_ACTIVE #是,栈指针指向7c00 0000:0627 803C00 CMP BYTE PTR [SI],00 #是不是不活动分区? 0000:062A 751C JNZ NOT_ACTIVE #跳转至NOT_ACTIVE 0000:062C 83C610 ADD SI,+10 #增量表指针加16 0000:062F FECB DEC BL #减少计数 0000:0631 75EF JNZ SEARCH_LOOP1 #循环 0000:0633 CD18 INT 18 #跳至 ROM BASIC FOUND_ACTIVE: # 找到了活动分区 0000:0635 8B14 MOV DX,[SI] #设置DH/DL为INT 13 0000:0637 8B4C02 MOV CX,[SI+02] #设置CH/CL为INT 13 0000:063A 8BEE MOV BP,SI #保存表指针 SEARCH_LOOP2: # 确定是一个活动分区 0000:063C 83C610 ADD SI,+10 #增量表指针加16 0000:063F FECB DEC BL #减少计数 0000:0641 741A JZ READ_BOOT #如果表结束,跳转 0000:0643 803C00 CMP BYTE PTR [SI],00 #是不是非活动分区 0000:0646 74F4 JZ SEARCH_LOOP2 #是,循环 NOT_ACTIVE: # 多于一个活动分区 0000:0648 BE8B06 MOV SI,068B #显示 "Invld prttn tbl" DISPLAY_MSG: # 显示消息循环 0000:064B AC LODSB #取得消息的字符 0000:064C 3C00 CMP AL,00 #判断消息的结尾 0000:064E 740B JZ HANG #是 0000:0650 56 PUSH SI #保存SI 0000:0651 BB0700 MOV BX,0007 #屏幕属性 0000:0654 B40E MOV AH,0E #显示一个字符 0000:0656 CD10 INT 10 0000:0658 5E POP SI #恢复SI 0000:0659 EBF0 JMP DISPLAY_MSG #循环 HANG: #挂起系统 0000:065B EBFE JMP HANG #停在这儿 READ_BOOT: #读活动分区的数据 0000:065D BF0500 MOV DI,0005 #INT 13 的尝试次数 INT13RTRY: #INT 13的重试循环 0000:0660 BB007C MOV BX,7C00 0000:0663 B80102 MOV AX,0201 #读入一个扇区 0000:0666 57 PUSH DI #保存DI 0000:0667 CD13 INT 13 #把扇区读入0000:7c00 0000:0669 5F POP DI #重存DI 0000:066A 730C JNB INT13OK #没有INT 13,跳转 0000:066C 33C0 XOR AX,AX #调用INT 13 ,硬盘重置 0000:066E CD13 INT 13 0000:0670 4F DEC DI #DI-- 0000:0671 75ED JNZ INT13RTRY #如果非零,重试 0000:0673 BEA306 MOV SI,06A3 #显示"Errr ldng systm" 0000:0676 EBD3 JMP DISPLAY_MSG #跳转至显示循环 INT13OK: #INT 13 出错 0000:0678 BEC206 MOV SI,06C2 #"missing op sys" 0000:067B BFFE7D MOV DI,7DFE #指向签名 0000:067E 813D55AA CMP WORD PTR [DI],AA55 #签名是否正确? 0000:0682 75C7 JNZ DISPLAY_MSG #不正确,跳至显示消息循环 0000:0684 8BF5 MOV SI,BP #设置SI 0000:0686 EA007C0000 JMP 0000:7C00 #跳转至启动扇区,SI指向分区 表入 ?nbsp; #这儿是消息 0000:0680 ........ ........ ......49 6e76616c * Inval* 0000:0690 69642070 61727469 74696f6e 20746162 *id partition tab* 0000:06a0 6c650045 72726f72 206c6f61 64696e67 *le.Error loading* 0000:06b0 206f7065 72617469 6e672073 79737465 * operating syste* 0000:06c0 6d004d69 7373696e 67206f70 65726174 *m.Missing operat* 0000:06d0 696e6720 73797374 656d00.. ........ *ing system. * #无用的数据 0000:06d0 ........ ........ ......00 00000000 * .....* 0000:06e0 00000000 00000000 00000000 00000000 *................* 0000:06f0 00000000 00000000 00000000 00000000 *................* 0000:0700 00000000 00000000 00000000 00000000 *................* 0000:0710 00000000 00000000 00000000 00000000 *................* 0000:0720 00000000 00000000 00000000 00000000 *................* 0000:0730 00000000 00000000 00000000 00000000 *................* 0000:0740 00000000 00000000 00000000 00000000 *................* 0000:0750 00000000 00000000 00000000 00000000 *................* 0000:0760 00000000 00000000 00000000 00000000 *................* 0000:0770 00000000 00000000 00000000 00000000 *................* 0000:0780 00000000 00000000 00000000 00000000 *................* 0000:0790 00000000 00000000 00000000 00000000 *................* 0000:07a0 00000000 00000000 00000000 00000000 *................* 0000:07b0 00000000 00000000 00000000 0000.... *............ * #分区表从0000:07be开始。每一个分区表入口是16个字节这个表定义了一个单个的主分 区并 是活动分区。 0000:07b0 ........ ........ ........ ....8001 * ....* 0000:07c0 0100060d fef83e00 00000678 0d000000 *......>....x....* 0000:07d0 00000000 00000000 00000000 00000000 *................* 0000:07e0 00000000 00000000 00000000 00000000 *................* 0000:07f0 00000000 00000000 00000000 0000.... *............ * #最后两个字节一定包括了55aah的数据。 0000:07f0 ........ ........ ........ ....55aa *..............U.* 本文来自:创幻论坛 http://www. 分区表的格式 偏移 意义 占用字节数 00 引导指示符 1B 01 分区引导记录的磁头号 1B 02 分区引导记录的扇区和柱面号 2B 04 系统指示符 1B 05 分区结束磁头号 1B 06 分区结束扇区和柱面号 2B 08 分区前面的扇区数 4B 0C 分区中总的扇区数 4B 4个分区中只能有1个活跃分区,即C盘。标志符是80H在分区表的第一个字节处。若是00H则表示非活跃分区。 例如: 80 01 01 00 0B FE 3F 81 3F 00 00 00 C3 DD 1F 00 00 00 01 82 05 FE BF 0C 02 DE 1F 00 0E 90 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 要点:(1)MBR位于硬盘第一个物理扇区柱面0,磁头0,扇区1处。不属于DOS扇区, (2)主引导记录分为硬盘的主引导程序和硬盘分区表。 6.DBR DBR位于柱面0,磁头1,扇区1,即逻辑扇区0。DBR分为两部分:DOS引导程序和BPB(BIOS参数块)。其中DOS引导程序完成DOS系统文件(IO.SYS,MSDOS.SYS)的定位与装载,而BPB用来描述本DOS分区的磁盘信息,BPB位于DBR偏移0BH处,共13字节。它包含逻辑格式化时使用的参数,可供DOS计算磁盘上的文件分配表,目录区和数据区的起始地址,BPB之后三个字提供物理格式化(低格)时采用的一些参数。引导程序或设备驱动程序根据这些信息将磁盘逻辑地址(DOS扇区号)转换成物理地址(绝对扇区号)。BPB格式 序号 偏移地址 意义 1 03H-0AH OEM号 2 0BH-0CH 每扇区字节数 3 0DH 每簇扇区数 4 0EH-0FH 保留扇区数 5 10H FAT备份数 6 11H-12H 根目录项数 7 13H-14H 磁盘总扇区数 8 15H 描述介质 9 16H-17H 每FAT扇区数 10 18H-19H 每磁道扇区数 11 1AH-1BH 磁头数 12 1CH-1FH 特殊隐含扇区数 13 20H-23H 总扇区数 14 24H-25H 物理驱动器数 15 26H 扩展引导签证 16 27H-2AH 卷系列号 17 2BH-35H 卷标号 18 36H-3DH 文件系统号 DOS引导记录公式: 文件分配表≡保留扇区数 根目录≡保留扇区数+FAT的个数×每个FAT的扇区数 数据区≡根目录逻辑扇区号+(32×根目录中目录项数+(每扇区字节数-1))DIV每扇区字节数 绝对扇区号≡逻辑扇区号+隐含扇区数 扇区号≡(绝对扇区号MOD每磁道扇区数)+1 磁头号≡(绝对扇区号DIV每磁道扇区数)MOD磁头数 磁道号≡(绝对扇区号DIV每磁道扇区数)DIV磁头数 要点:(1)DBR位于柱面0,磁头1,扇区1,其逻辑扇区号为0 (2)DBR包含DOS引导程序和BPB。 (3)BPB十分重要,由此可算出逻辑地址与物理地址。 7.文件分配表 文件分配表是DOS文件组织结构的主要组成部分。我们知道DOS进行分配的最基本单位是簇。文件分配表是反映硬盘上所有簇的使用情况,通过查文件分配表可以得知任一簇的使用情况。DOS在给一个文件分配空间时总先扫描FAT,找到第一个可用簇,将该空间分配给文件,并将该簇的簇号填到目录的相应段内。即形成了“簇号链”。FAT就是记录文件簇号的一张表。FAT的头两个域为保留域,对FAT12来说是3个字节,FAT来说是4个字节。其中头一个字节是用来描述介质的,其余字节为FFH 。介质格式与BPB相同。 第一个字节的8位意义: 7 6 5 4 3 2 1 0 └─────-┘ │ │ │┌0非双面 置1 │ │ └┤ │ │ └1双面 │ │┌0不是8扇区 │ └┤ │ └1是8扇区 │┌0不是可换的 └┤ └1是可换的 FAT结构含义 FAT12 FAT16 意义 000H 0000H 可用 FF0H-FF6H FFF0H-FFF6H 保留 FF7H FFF7H 坏 FF8H-FFFH FFF8H-FFFFH 文件最后一个簇 ×××H ××××H 文件下一个簇 对于FAT16,簇号×2作偏移地址,从FAT中取出一字即为FAT中的域。 逻辑扇区号=数据区起始逻辑扇区号+(簇号-2)×每簇扇区数 簇号=(逻辑扇区号-数据区起始逻辑扇区号)DIV每簇扇区数+2 要点:(1)FAT反映硬盘上所有簇的使用情况,它记录了文件在硬盘中具体位置(簇)。 (2)文件第一个簇号(在目录表中)和FAT的该文件的簇号串起来形成文件的“簇号链”,恢复被破坏的文件就是根 据这条链。 (3)由簇号可算逻辑扇区号,反之,由逻辑扇区号也可以算出簇号,公式如上。 (4)FAT位于DBR之后,其DOS扇区号从1开始。 8.文件目录 文件目录是DOS文件组织结构的又一重要组成部分。文件目录分为两类:根目录,子目录。根目录有一个,子目录可以有多个。子目录下还可以有子目录,从而形成“树状”的文件目录结构。子目录其实是一种特殊的文件,DOS为目录项分配32字节。目录项分为三类:文件,子目录(其内容是许多目录项),卷标(只能在根目录,只有一个。目录项中有文件(或子目录,或卷标)的名字,扩展名,属性,生成或最后修改日期,时间,开始簇号,及文件大小。 目录项的格式 字节偏移 意义 占字节数 00H 文件名 8B 08H 扩展名 3B 0BH 文件属性 1B 0CH 保留 10B 16H 时间 2B 18H 日期 2B 1AH 开始簇号 2B 1CH 文件长度 4B 目录项文件名区域中第一个字节还有特殊的意义:00H代表未使用 05H代表实际名为E5H EBH代表此文件已被删除 目录项属性区域的这个字节各个位的意义如下: 7 6 5 4 3 2 1 0 未 修 修 子 卷 系 隐 只 用 改 改 目 标 统 藏 读 标 标 录 属 属 属 志 志 性 性 性 注意:WINDOWS的长文件名使用了上表中所说的“保留”这片区域。 要点:(1)文件目录是记录所有文件,子目录名,扩展名属性,建立或删除最后修改日期。文件开始簇号及文件长度的一张 登记表. (2)DOS中DIR列出的内容训是根据文件目录表得到的。 (3)文件起始簇号填在文件目录中,其余簇都填在FAT中上一簇的位置上。 9.物理驱动器与逻辑驱动器 物理驱动器指实际安装的驱动器。 逻辑驱动器是对物理驱动器格式化后产生的。 要点:同上。 浏览:552 [打印 返回 关闭] ·下一篇:[06-08-28] 挽救硬盘的10个方法(维护硬盘故障) ·上一篇:[06-08-28] 进行电脑维修的几个简单步骤 相关文章:[知识,扇区,磁道] ·◎硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR) ·◎主板电容小知识 ·◎注册表基本知识 ·◎受用一生的电脑知识 ·◎Linux 发行版和安装的基本知识 分类栏目 ·硬盘 ·CPU ·主板 ·综合 ·内存 ·显示器 ·鼠标键盘 ·打印机 热门标签 ·方法(102) ·故障(99) ·技巧(66) ·XP(61) ·病毒(60) ·所有标签 点击排行 ·硬盘基本知识.. ·如何给硬盘加.. ·硬盘拷贝三法 ·延长寿命:让硬.. ·减少硬盘出故.. 当硬盘受到外部强磁体、强磁场的影响,或因长期使用,硬盘盘片上由低级格式化划分出来的扇区格式磁性记录部分丢失,从而出现大量“坏扇区”时,可以通过低级格式化来重新划分“扇区”。但是前提是硬盘的盘片没有受到物理性划伤。硬盘低级格式化的功用硬盘低格格式化是对硬盘最彻底的初始化方式,经过低格后的硬盘,原来保护的数据将全部丢失,所以一般来说低格硬盘是非常不可取的,只有非常必要的时候才能低格硬盘。当硬盘出现某种类型的坏道时,使用低级格式化能起到一定的缓解或者屏蔽作用。 逻辑坏道相对比较容易解决,它指硬盘在写入时受到意外干扰,造成有ECC错误。从过程上讲,它是指硬盘在写入数据的时候,会用ECC的逻辑重新组合数据,一般操作系统要写入512个字节,但实际上硬盘会多写几十个字节,而且所有的这些字节都要用ECC进行校验编码,如果原始字节算出的ECC校正码和读出字节算出的ECC不同,这样就会产生ECC错误,这就是所谓的逻辑坏道产生原因。 物理坏道,磁盘表面物理损坏就是硬性的,这是无法修复的。而由于外界影响而造成数据的写入错误时,系统也会认为是物理坏道,而这种物理坏道是可以使用一些硬盘工具(例如硬盘厂商提供的检测修复软件)来修复,此外,对于微小的硬盘表面损伤,一些硬盘工具(例如西部数据的Data Lifeguard Tools)就可以重新定向到一个好的保留扇区来修正错误。 对于硬盘上出现逻辑坏道或者软性物理坏道,用户可以试试使用低级格式化来达到屏蔽坏道的作用,但这里需要指出,屏蔽坏道并不等于消除坏道了,低格硬盘能把原来硬盘内所有分区都删除,但坏道却依然存在,屏蔽只是将坏道隐藏起来,不让用户在存储数据时使用这些坏道,这样能在一定程度上保证用户数据的可靠性,但坏道却会随着硬盘分区、格式化次数的增长而扩散蔓延。 1、对扇区清零和重写校验值。低格过程中将每个扇区的所有字节全部置零,并将每个扇区的校验值也写回初始值,这样可以将部分缺陷纠正过来。譬如,由于扇区数据与该扇区的校验值不对应,通常就被报告为校验错误(ECC Error)。如果并非由于磁介质损伤,清零后就很有可能将扇区数据与该扇区的校验值重新对应起来,而达到“修复”该扇区的功效。这是每种低格工具和每种硬盘的低格过程最基本的操作内容,同时这也是为什么通过低格能“修复大量坏道”的基本原因。另外,DM中的Zero Fill(清零)操作与IBM DFT工具中的Erase操作,也有同样的功效。 2、对扇区进行读写检查,并尝试替换缺陷扇区。有些低格工具会对每个扇区进行读写检查,如果发现在读过程或写过程出错,就认为该扇区为缺陷扇区。然后,调用通用的自动替换扇区(Automatic reallocation sector)指令,尝试对该扇区进行替换,也可以达到“修复”的功效。 3、对扇区的标识信息重写。在多年以前使用的老式硬盘(如采用ST506接口的硬盘),需要在低格过程中重写每个扇区的标识(ID)信息和某些保留磁道的其他一些信息,当时低格工具都必须有这样的功能。但现在的硬盘结构已经大不一样,如果再使用多年前的工具来做低格会导致许多令人痛苦的意外。难怪经常有人在痛苦地高呼:“危险!切勿低格硬盘!我的硬盘已经毁于低格!” 4、对所有物理扇区进行重新编号。编号的依据是P-list中的记录及区段分配参数(该参数决定各个磁道划分的扇区数),经过编号后,每个扇区都分配到一个特定的标识信息(ID)。编号时,会自动跳过P-list中所记录的缺陷扇区,使用户无法访问到那些缺陷扇区(用户不必在乎永远用不到的地方的好坏)。如果这个过程半途而废,有可能导致部分甚至所有扇区被报告为标识不对(Sector ID not found, IDNF)。要特别注意的是,这个编号过程是根据真正的物理参数来进行的,如果某些低格工具按逻辑参数(以 16heads 63sector为最典型)来进行低格,是不可能进行这样的操作。 5、写磁道伺服信息,对所有磁道进行重新编号。有些硬盘允许将每个磁道的伺服信息重写,并给磁道重新赋予一个编号。编号依据P-list或TS记录来跳过缺陷磁道(defect track),使用户无法访问(即永远不必使用)这些缺陷磁道。这个操作也是根据真正的物理参数来进行。 6、写状态参数,并修改特定参数。有些硬盘会有一个状态参数,记录着低格过程是否正常结束,如果不是正常结束低格,会导致整个硬盘拒绝读写操作,这个参数以富士通IDE硬盘和希捷SCSI硬盘为典型。有些硬盘还可能根据低格过程的记录改写某些参数。 我们经常使用的DM中的Low level format命令进行的低级格式化操作,主要进行了第1条和第3条的操作。速度较快,极少损坏硬盘,但修复效果不明显。另外在Lformat工具中,进行了前三项的操作。由于同时进行了读写检查,操作速度较慢,可以替换部分缺陷扇区 常见低格工具有lformat、DM及硬盘厂商们推出的各种硬盘工具等。 汇编语言低格,用Debug汇编语言进行低级格式化 低级格式化硬盘能完成销毁硬盘内的数据,所以在操作前一定要谨慎。硬盘低格有许多方法,例如直接在CMOS中对硬盘进行低格,或者使用汇编语言进行硬盘低格。汇编是比较低级的一种编程语言,它能非常方便地直接操作硬件,而且运行效率很高,如果软件系统中需要直接操作硬件时,经常使用的就是汇编语言。使用汇编也可以对硬盘进行低级格式化,它比DM等工具软件显得更为灵活,具体应用时就是使用debug程序,而具体操作就是在debug环境下,调用存放在BIOS 中的低级格式化程序(CMOS中直接低格硬盘调用的也是此段低格程序)。实现方法通常有如下三种: (1)、直接调用BIOS ROM中的低格程序 在很多计算机的BIOS ROM中存放着低格程序,存放地址从C8005H地址开始,具体操作如下: A:\>Debug -G C800 :0005(这时屏幕显示信息(不同版本的BIOS显示的信息可能不同),回车后提示:) Current Interleave is 3 select new interleave or Return for current(这是要求用户选择交叉因子,按回车表示取默认值3,也可输入新的交叉因子值,硬盘的交叉因子一般是3,所以直接回车即可。屏幕接着提示:) Are you dynamically configuring the drive-answer YN t Press“Y”to begin formatting the drive C: with interleave 03(键入“Y”后开始对硬盘进行低格) Formatting ……(完成后询问是否处理坏磁道) Do you want to format bad track-answer YN? 若没有则用“N”回答。屏幕显示: Format Successful,system will new restart,Insert Dos diskette indrive A: 插入系统盘到A驱动器,即可进行分区,高级格式化等操作来安装系统了。 (2)、通过调用INT 13H中断的7号功能对硬盘进行低格 操作如下: A:\>DEBUG -A 100 -XXXX:0100 MOV AX,0703;(交叉因子为3) -XXXX:0103 MOV CX,0001;(0磁道0扇区起) -XXXX:0106 MOV DX,0080;(C盘0磁道) -XXXX:0109 INT 13 -XXXX:010B INT 3 -XXXX:010D -G 100 这样硬盘就被低格了。 (3)、调用INT 13H中断的5号功能 对硬盘调用INT 13H中断的5号功能只低格0面0道1扇区,而不必低格整个硬盘,从而使低格在很短的时间内完成。具体操作如下: ADEBUG -A 100 -XXXX:0100 MOV AX,0500;(调用5号功能) -XXXX:0103 MOV BX,0180;(设置缓冲区地址) -XXXX:0106 MOV CX,0001;(0磁道1扇区起) -XXXX:0109 MOV DX,0080;(C盘0磁道) -XXXX:010B INT 13 -XXXX:010D INT 3 -E 0180 0 0 0002;(写入参数) -G 100 DM低级格式化方法 用DM进行低级格式化 DM的全名是Hard Disk Management Program,它能对硬盘进行低级格式化、校验等管理工作,可以提高硬盘的使用效率。总的来说,DM具有如下几个功能:硬盘低级格式化、分区、高级格式化、硬盘参数配置及其它功能。 在实际应用时,dm工具跟普通DOS命令(如fdisk或format)一样,它的命令格式为:ADM [参数] 。其中的参数可取以下值: M DM软件以手工方式进入,如无该参数,DM以自动方式运行,依次执行INITIALIZE. PARTITIONG. PREPARAFION。 C DM软件以彩色方式执行,即运行于彩色显示器上。 P DM软件以PCXT方式管理硬盘。 A DM软件以PCAT方式管理硬盘。 2 DOS 2.XX版本方式。 3 DOS 3.XX版本方式。 4 DOS 4.XX版本方式(仅DM 5.01版有此参数)。 V DM运行于可改变簇长度、根目录项方式。 在实际使用中常用以下两种方式启动: 1、ADM (自动方式。初始化硬盘时很多参数都用默认值几乎不要人工干预)。 2、ADM (手动方式。作格式化时一些参数要人工指定)。 启动dm工具后,用户就可以根据自己的需要选择相应的操作,由于它也是以DOS用户界面的形式存,所以使用起来也十分简捷、明了。 其它低级格式化方法 除了上面介绍的两种低格工具外,还有许多其它低级格式化方法。 1、CMOS中直接操作 如果主板支持,用户可以直接在CMOS对硬盘进行低级格式化,这种方法非常简单、方便,因此如果可能的话,笔者推荐使用这种方法进行硬盘低格。具体操作方法:在开机时根据系统提示进入CMOS Setup(如果是Award等BIOS,会提示按DEL进入CMOSSetup,如果是Intel主板,一般是按F2进入CMOS Setup),接着在CMOS菜单内选择low formatted HardDisk Drive选择,然后根据程序提示进行待低格硬盘,同时回答一些程序提问即可进行硬盘低级格式化。 2、lformat.com程序低格硬盘 除了dm工具外,还有一款比较常见的低格程序是lformat.exe,它是由迈拓公司推出的低级格式化硬盘工具。在DOS状态下运行 lformat.exe后,程序即启动警告界面。在该画面中说明的大概意思是,如果用户使用这个工具时,硬盘内所有数据将丢失,因此推荐在运行它之前备份必要的数据,同时推荐移走所有其它硬盘。如果用户忘记备份数据,而希望退出该程序,则可以按除Y之外的任意键即可,如果用户确认对硬盘进行低格,请按 “Y”键。 如果选择了“Y”后,程序将要求用户选择硬盘或者就对当前硬盘进行低格,接着,问答几个提问,即可开始硬盘低级格式化过程。 编辑本段低格,高格及快格的区别 类型 主要工作 特点 备注 低级格式化 介质检查;磁盘介质测试;划分磁道和扇区;对每个扇区进行编号(C/H/S);设置交叉因子。 只能在DOS环境或自写的汇编指令下进行,低级格式化只能整盘进行。 高级格式化 清除数据(写删除标记);检查扇区;重新初始化引导信息;初始化分区表信息; 可以在DOS和操作系统上进行,只能对分区操作。高级格式化只是存储数据,但如果存在坏扇区可能会导致长时间磁盘读写。 DOS下可能有分区识别问题。使用Format命令格式化不会自动修复逻辑坏道,如果发现有坏道,最好使用SCANDISK或WINDOWS系统的磁盘检查功能、还有其它第三方软件进行修复或隐藏,逻辑坏道既可以通过磁盘检查也可以通过低格解决,这取决于是扇区的哪个部分出现了错误。 快速格式化 删除文件分配表;不检查扇区损坏情况; 可以在DOS和操作系统上进行,只能对分区操作。 硬盘MBR全面分析 主板芯片和CPU收到了不符合规定的电流,将自动产生一个RESET信号,在主板没有收到电源的Power Good信号之前,重复RESET信号 BIOSJMP指令,跳转到真正的BIOS启动程序处 BIOS开始加电自检(Power-On Self Test, POST),若成功执行INT 19h(SYSTEM - BOOTSTRAP LOADER) BIOS开始寻找显卡,找到的话将执行显卡的BIOS。接着显卡初始化,将显示一段显卡信息 BIOS开始执行所有其他设备的BIOS,包括软驱,硬盘等 BIOS显示启动信息 BIOS开始额外的检测。一般有内存检测,如果内存有问题,将显示错误消息 BIOS探测所有的硬件,将显示硬盘/光区信息等 BIOS给出一个已知硬件的列表 BIOS按照设置的驱动器顺序找驱动器,如果驱动器存在的话继续找启动扇区,软驱/硬盘的启动扇区都在0柱0头1扇区(cylinder 0, head 0, sector 1) 将启动扇区读到内存0000:7c00处,接着INT 19h开始执行0000:7c00处代码 如果找不到驱动器,系统显示错误信息并停止。通常是"No boot device"或"NO ROM BASIC -SYSTEM HALTED" 磁盘的启动扇区就是主引导记录(Master Boot Record),包括0柱0头1扇区的512个字节,它的任务是完成BIOS到操作系统的交接。 MBR的大体结构: 偏移 内容 0000 MBR程序代码 01BE 分区表 01FE 结束标志 分区表结构 BYTE 1 如果是引导分区,就是80H,如果不是,就是00H 2-4 是该分区的起始扇区号 5 标志字节,比如05表示扩展分区 6-8 该分区的终止扇区号 9-12 该分区已使用的扇区数 13-16 该分区总共占用的扇区数 这是从我的硬盘上提取的MBR(硬盘是Maxtor的金钻20G,netfay的电脑早过时了:P),不同型号的硬盘MBR稍有不同,不过功能都是一样的 0000 33 C0 8E D0 BC 00 7C FB-50 07 50 1F FC BE 1B 7C 3.....|.P.P....| 0010 BF 1B 06 50 57 B9 E5 01-F3 A4 CB BE BE 07 B1 04 ...PW........... 0020 38 2C 7C 09 75 15 83 C6-10 E2 F5 CD 18 8B 14 8B 8,|.u........... 0030 EE 83 C6 10 49 74 16 38-2C 74 F6 BE 10 07 4E AC ....It.8,t....N. 0040 3C 00 74 FA BB 07 00 B4-0E CD 10 EB F2 89 46 25 <.t...........F% 0050 96 8A 46 04 B4 06 3C 0E-74 11 B4 0B 3C 0C 74 05 ..F...<.t...<.t. 0060 3A C4 75 2B 40 C6 46 25-06 75 24 BB AA 55 50 B4 :.u+@.F%.u$..UP. 0070 41 CD 13 58 72 16 81 FB-55 AA 75 10 F6 C1 01 74 A..Xr...U.u....t 0080 0B 8A E0 88 56 24 C7 06-A1 06 EB 1E 88 66 04 BF ....V$.......f.. 0090 0A 00 B8 01 02 8B DC 33-C9 83 FF 05 7F 03 8B 4E .......3.......N 00A0 25 03 4E 02 CD 13 72 29-BE 59 07 81 3E FE 7D 55 %.N...r).Y..>.}U 00B0 AA 74 5A 83 EF 05 7F DA-85 F6 75 83 BE 2E 07 EB .tZ.......u..... 00C0 8A 98 91 52 99 03 46 08-13 56 0A E8 12 00 5A EB ...R..F..V....Z. 00D0 D5 4F 74 E4 33 C0 CD 13-EB B8 00 00 80 08 10 16 .Ot.3........... 00E0 56 33 F6 56 56 52 50 06-53 51 BE 10 00 56 8B F4 V3.VVRP.SQ...V.. 00F0 50 52 B8 00 42 8A 56 24-CD 13 5A 58 8D 64 10 72 PR..B.V$..ZX.d.r 0100 0A 40 75 01 42 80 C7 02-E2 F7 F8 5E C3 EB 74 B7 .@u.B......^..t. 0110 D6 C7 F8 B1 ED CE DE D0-A7 A1 A3 B0 B2 D7 B0 B3 ................ 0120 CC D0 F2 CE DE B7 A8 BC-CC D0 F8 A1 A3 00 BC D3 ................ 0130 D4 D8 B2 D9 D7 F7 CF B5-CD B3 CA B1 B3 F6 CF D6 ................ 0140 B4 ED CE F3 A1 A3 B0 B2-D7 B0 B3 CC D0 F2 CE DE ................ 0150 B7 A8 BC CC D0 F8 A1 A3-00 C8 B1 C9 D9 B2 D9 D7 ................ 0160 F7 CF B5 CD B3 00 00 00-00 00 00 00 00 00 00 00 ................ 0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0180 00 00 00 8B FC 1E 57 8B-F5 CB 00 00 00 00 00 00 ......W......... 0190 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01B0 00 00 00 00 00 2C 44 63-B5 D7 B5 D7 00 00 80 01 .....,Dc........ 01C0 01 00 0B FE 7F FD 3F 00-00 00 3F 04 7D 00 00 00 ......?...?.}... 01D0 41 FE 0C FE FF FF 7E 04-7D 00 7D 9B E5 01 00 00 A.....~.}.}..... 01E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U. 由于程序代码从0000:7C00开始,下面看反编译的结果(经过修改) 7C00 33C0 XOR AX,AX ;AX=0 7C02 8ED0 MOV SS,AX ;SS=0 7C04 BC007C MOV SP,7C00 ;SP=7C00 7C07 FB STI ;中断允许 7C08 50 PUSH AX 7C09 07 POP ES ;ES=0 7C0A 50 PUSH AX 7C0B 1F POP DS ;DS=0 7C0C FC CLD ;字符串操作方向:从低到高 7C0D BE1B7C MOV SI,7C1B ;源地址 DS:SI=0000:7C1B 7C10 BF1B06 MOV DI,061B ;目的地址 ES:DI=0000:061B 7C13 50 PUSH AX 7C14 57 PUSH DI 7C15 B9E501 MOV CX,01E5 ;共1E5h个字节 7C18 F3 REPZ 7C19 A4 MOVSB ;将MBR从0000:7C00移动到0000:0600 7C1A CB RETF ;跳转到0000:061B处 PARTITION_SEARCH_LOOP: 061B BEBE07 MOV SI,07BE ;SI指向分区表的开始 061E B104 MOV CL,04 ;循环4次,硬盘最多4个主分区 0620 382C CMP [SI],CH 0622 7C09 JL ACTIVE_PARTITION_FOUND ;分区是活动分区 0624 7515 JNZ INVALID_PARTITION_TABLE ;无效的分区表 0626 83C610 ADD SI,+10 ;每个分区占用16个字节,SI指向下一个分区 0629 E2F5 LOOP PARTITION_SEARCH_LOOP 062B CD18 INT 18 ;分区表搜索完,无活动分区,INT 18h=DISKLESS BOOT HOOK ACTIVE_PARTITON_FOUND: 062D 8B14 MOV DX,[SI] ;下面的搜索保证只存在一个活动分区,否则分区表无效 062F 8BEE MOV BP,SI ;找到的引导分区标志和开始地址分别存入DX,BP ONLY_ONE_ACTIVE_PARTITON_SEARCH_LOOP: 0631 83C610 ADD SI,+10 0634 49 DEC CX 0635 7416 JZ GOOD_PARTITION_TABLE ;搜索完毕,剩下的分区中无活动分区,分区表正常 0637 382C CMP [SI],CH 0639 74F6 JZ ONLY_ONE_ACTIVE_PARTITON_SEARCH_LOOP ;如果还有活动分区则继续向下执行 INVALID_PARTITION_TABLE: 063B BE1007 MOV SI,0710 ;SI指向要显示的错误信息处 HANG_MACHINE_LOOP: 063E 4E DEC SI DISPLAY_ERROR_MESSAGE_LOOP: 063F AC LODSB 0640 3C00 CMP AL,00 0642 74FA JZ HANG_MACHINE_LOOP ;到字符串尾时进入死循环,停止运行 0644 BB0700 MOV BX,0007 0647 B40E MOV AH,0E 0649 CD10 INT 10 ;显示错误信息 DISPLAY_ERROR_MESSAGE_LOOP_ALIAS: 064B EBF2 JMP DISPLAY_ERROR_MESSAGE_LOOP GOOD_PARTITION_TABLE: 064D 894625 MOV [BP+25],AX ;tmpvar=BP+25处清零,作为临时变量 0650 96 XCHG SI,AX ;SI=0 0651 8A4604 MOV AL,[BP+04] ;读分区类型入AL 0654 B406 MOV AH,06 0656 3C0E CMP AL,0E ;类型 WIN95: DOS 16-bit FAT, LBA-mapped 0658 7411 JZ TYPE_WIN95_DOS_16BIT_FAT_LBA 065A B40B MOV AH,0B 065C 3C0C CMP AL,0C ;类型 WIN95 OSR2 32-bit FAT, LBA-mapped 065E 7405 JZ TYPE_WIN95_OSR2_32BIT_FAT_LBA 0660 3AC4 CMP AL,AH ;类型 WIN95 OSR2 32-bit FAT 0662 752B JNZ TYPE_DEFAULT 0664 40 INC AX ;AX=0B0C TYPE_WIN95_OSR2_32BIT_FAT_LBA: 0665 C6462506 MOV BYTE PTR [BP+25],06 ;tmpvar=06 0669 7524 JNZ TYPE_DEFAULT ;这里有点问题,这个转移应该肯定不成立? TYPE_WIN95_DOS_16BIT_FAT_LBA: 066B BBAA55 MOV BX,55AA 066E 50 PUSH AX 066F B441 MOV AH,41 0671 CD13 INT 13 ;int 13h扩展功能的检测,IBM/MS INT 13 Extensions - INSTALLATION CHECK 0673 58 POP AX 0674 7216 JB INT13H_EXTENSION_UNSUPPORTED ;CF=1 - 不支持int 13h扩展功能 0676 81FB55AA CMP BX,AA55 ;BX不为AA55 - 不支持int 13h扩展功能 067A 7510 JNZ INT13H_EXTENSION_UNSUPPORTED 067C F6C101 TEST CL,01 ;CL不为1 - 不支持int 13h扩展功能 067F 740B JZ INT13H_EXTENSION_UNSUPPORTED 0681 8AE0 MOV AH,AL ;AH=0E 0683 885624 MOV [BP+24],DL ;tmpvar=DL,引导分区标志 0686 C706A106EB1E MOV WORD PTR [06A1],1EEB ;改06A1处指令为PUSH DS; JMP NEW_LOCATION_1 INT13H_EXTENSION_UNSUPPORTED: 068C 886604 MOV [BP+04],AH ;如果支持的话置分区类型为0E(类型 WIN95: DOS 16-bit FAT, LBA-mapped) ;否则为06(类型 DOS 3.31+ 16-bit FAT over 32M) TYPE_DEFAULT: 068F BF0A00 MOV DI,000A READ_SECTOR_LOOP: 0692 B80102 MOV AX,0201 0695 8BDC MOV BX,SP ;BX设置为7C00 0697 33C9 XOR CX,CX ;CX=0 0699 83FF05 CMP DI,+05 069C 7F03 JG NEW_LOCATION_0 069E 8B4E25 MOV CX,[BP+25] NEW_LOCATION_0: 06A1 034E02 ADD CX,[BP+02] 06A4 CD13 INT 13 ;将活动分区的起始扇区读到0000:7C00 NEW_LOCATION_1: 06A6 7229 JB READ_SECTOR_ERROR ;CF=1 - 错误 06A8 BE5907 MOV SI,0759 06AB 813EFE7D55AA CMP WORD PTR [7DFE],AA55 ;扇区结束标志是否正确? 06B1 745A JZ READ_SECTOR_SUCCEEDED ;正确 06B3 83EF05 SUB DI,+05 ;DI=DI-5 06B6 7FDA JG READ_SECTOR_LOOP 06B8 85F6 TEST SI,SI 06BA 7583 JNZ DISPLAY_ERROR_MESSAGE_LOOP: ;显示错误信息:缺少操作系统 06BC BE2E07 MOV SI,072E 06BF EB8A JMP DISPLAY_ERROR_MESSAGE_LOOP_ALIAS ;显示错误信息:加载操作系统时发生错误。 070D EB74 JMP CONTINUE_KOAD_OS 0783 8BFC MOV DI,SP ;DI=7C00 0785 1E PUSH DS 0786 57 PUSH DI 0787 8BF5 MOV SI,BP 0789 CB RETF ;转到执行0000:7C00处的语句,即操作系统的引导程序 硬盘主引导记录(MBR)及其结构 硬盘的0柱面、0磁头、1扇区称为主引导扇区,FDISK程序写到该扇区的内容称为主引导记录(MBR)。该记录占用512个字节,它用于硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统区。 1.MBR的读取 硬盘的引导记录(MBR)是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它。但我们可以用ROM-BIOS中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取。 用INT13H的读磁盘扇区功能的调用参数如下: 入口参数:AH=2 (指定功能号) AL=要读取的扇区数 DL=磁盘号(0、1-软盘;80、81-硬盘) DH=磁头号 CL高2位+CH=柱面号 CL低6位=扇区号 CS:BX=存放读取数据的内存缓冲地址 出口参数:CS:BX=读取数据存放地址 错误信息:如果出错CF=1 AH=错误代码 用DEBUG读取位于硬盘0柱面、0磁头、1扇区的操作如下: A>DEBUG -A 100 XXXX:XXXX MOV AX,0201 (用功能号2读1个扇区) XXXX:XXXX MOV BX,1000 (把读出的数据放入缓冲区的地址为CS:1000) XXXX:XXXX MOV CX,0001 (读0柱面,1扇区) XXXX:XXXX MOV DX,0080 (指定第一物理盘的0磁头) XXXX:XXXX INT 13 XXXX:XXXX INT 3 XXXX:XXXX (按回车键) -G=100 (执行以上程序段) -D 1000 11FF (显示512字节的MBR内容) 2.MBR的组成 一个扇区的硬盘主引导记录MBR由如图6-15所示的4个部分组成。 ·主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。 ·出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。 ·分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。 ·结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。
图6-15 MBR的组成结构图
4.MBR的主要功能及工作流程
图具有4个逻辑盘的分区链表示意图 需要指出的是,在以前的磁盘读取技术水平下,低级格式化是一种损耗性操作,其对硬盘寿命有一定的负面影响。最近一两年出的硬盘进行低级格式化影响要小的多,因为他不是物理上的操作。因此,许多硬盘厂商均建议用户不到万不得已,不可“妄”使此招。当硬盘受到外部强磁体、强磁场的影响,或因长期使用,硬盘盘片上由低级格式化划分出来的扇区格式磁性记录部分丢失,从而出现大量“坏扇区”时,可以通过低级格式化来重新划分“扇区”。但是前提是硬盘的盘片没有受到物理性划伤。 硬盘低级格式化的功用硬盘低格格式化是对硬盘最彻底的初始化方式,经过低格后的硬盘,原来保护的数据将全部丢失,所以一般来说低格硬盘是非常不可取的,只有非常必要的时候才能低格硬盘。而这个所谓的必要时候有两种,一是硬盘出厂前,硬盘厂会对硬盘进行一次低级格式化;另一个是当硬盘出现某种类型的坏道时,使用低级格式化能起到一定的缓解或者屏蔽作用。 对于第一种情况,这里不用多说了,因为硬盘出厂前的低格工作只有硬盘工程师们才会接触到,对于普通用户而言,根本无须考虑这方面的事情。至于第二种情况,是什么类型的坏道时才需要低格呢?在说明这个关键性问题前,先来看看硬盘坏道的类型。 编辑本段产生原因及作用 逻辑坏道 总的来说,坏道可以分为物理坏道和逻辑坏道。其中逻辑坏道相对比较容易解决,它指硬盘在写入时受到意外干扰,造成有ECC错误。从过程上讲,它是指硬盘在写入数据的时候,会用ECC的逻辑重新组合数据,一般操作系统要写入512个字节,但实际上硬盘会多写几十个字节,而且所有的这些字节都要用ECC进行校验编码,如果原始字节算出的ECC校正码和读出字节算出的ECC不同,这样就会产生ECC错误,这就是所谓的逻辑坏道产生原因。 物理坏道 至于物理坏道,它对硬盘的损坏更具致命性,它也有软性和硬性物理坏道的区别,磁盘表面物理损坏就是硬性的,这是无法修复的。而由于外界影响而造成数据的写入错误时,系统也会认为是物理坏道,而这种物理坏道是可以使用一些硬盘工具(例如硬盘厂商提供的检测修复软件)来修复,此外,对于微小的硬盘表面损伤,一些硬盘工具(例如西部数据的Data Lifeguard Tools)就可以重新定向到一个好的保留扇区来修正错误。 对于这些坏道类型,硬性的物理坏道肯定是无法修复的,它是对硬盘表面的一种最直接的损坏,所以即使再低格或者使用硬盘工具也无法修复(除非是非常微小的损坏,部分工具可以将这部份坏道保留不用以此达到解决目的)。 低格的作用 对于硬盘上出现逻辑坏道或者软性物理坏道,用户可以试试使用低级格式化来达到屏蔽坏道的作用,但这里需要指出,屏蔽坏道并不等于消除坏道了,低格硬盘能把原来硬盘内所有分区都删除,但坏道却依然存在,屏蔽只是将坏道隐藏起来,不让用户在存储数据时使用这些坏道,这样能在一定程度上保证用户数据的可靠性,但坏道却会随着硬盘分区、格式化次数的增长而扩散蔓延。 所以笔者并不推荐用户对硬盘进行低格,如果硬盘在保修期内最好去保修或者找经销商换一块,这可以说是最佳解决方案,也是最彻底的解决方案了。如果硬盘过了保修期不让换,那可以试试低格硬盘,以防止将数据存储到坏道导致数据损失。 编辑本段方法 工具低格 对于如何进行硬盘低格,一般来说是使用低格工具来操作,这个将在下面的章节中详细介绍,这里再说一些相关话题。即低格工具跟硬盘检测工具是有着本质的区别,低格工具就是对硬盘进行低格的作用,而硬盘检测工具一般来说是硬盘厂商推出的用来检测硬盘,及早发现硬盘错误,以提醒用户备份重要数据或者检修硬盘用的,它不是用于低格硬盘。 而最常见的莫过于使用一些工具软件来对硬盘进行低格,常见低格工具有lformat、DM及硬盘厂商们推出的各种硬盘工具等。 汇编语言低格 用Debug汇编语言进行低级格式化 低级格式化硬盘能完成销毁硬盘内的数据,所以在操作前一定要谨慎。硬盘低格有许多方法,例如直接在CMOS中对硬盘进行低格,或者使用汇编语言进行硬盘低格。汇编是比较低级的一种编程语言,它能非常方便地直接操作硬件,而且运行效率很高,如果软件系统中需要直接操作硬件时,经常使用的就是汇编语言。使用汇编也可以对硬盘进行低级格式化,它比DM等工具软件显得更为灵活,具体应用时就是使用debug程序,而具体操作就是在debug环境下,调用存放在BIOS 中的低级格式化程序(CMOS中直接低格硬盘调用的也是此段低格程序)。实现方法通常有如下三种: (1)、直接调用BIOS ROM中的低格程序 在很多计算机的BIOS ROM中存放着低格程序,存放地址从C8005H地址开始,具体操作如下: A:\>Debug -G C800 :0005(这时屏幕显示信息(不同版本的BIOS显示的信息可能不同),回车后提示:) Current Interleave is 3 select new interleave or Return for current(这是要求用户选择交叉因子,按回车表示取默认值3,也可输入新的交叉因子值,硬盘的交叉因子一般是3,所以直接回车即可。屏幕接着提示:) Are you dynamically configuring the drive-answer YN t Press“Y”to begin formatting the drive C: with interleave 03(键入“Y”后开始对硬盘进行低格) Formatting ……(完成后询问是否处理坏磁道) Do you want to format bad track-answer YN? 若没有则用“N”回答。屏幕显示: Format Successful,system will new restart,Insert Dos diskette indrive A: 插入系统盘到A驱动器,即可进行分区,高级格式化等操作来安装系统了。 (2)、通过调用INT 13H中断的7号功能对硬盘进行低格 操作如下: A:\>DEBUG -A 100 -XXXX:0100 MOV AX,0703;(交叉因子为3) -XXXX:0103 MOV CX,0001;(0磁道0扇区起) -XXXX:0106 MOV DX,0080;(C盘0磁道) -XXXX:0109 INT 13 -XXXX:010B INT 3 -XXXX:010D -G 100 这样硬盘就被低格了。 (3)、调用INT 13H中断的5号功能 对硬盘调用INT 13H中断的5号功能只低格0面0道1扇区,而不必低格整个硬盘,从而使低格在很短的时间内完成。具体操作如下: ADEBUG -A 100 -XXXX:0100 MOV AX,0500;(调用5号功能) -XXXX:0103 MOV BX,0180;(设置缓冲区地址) -XXXX:0106 MOV CX,0001;(0磁道1扇区起) -XXXX:0109 MOV DX,0080;(C盘0磁道) -XXXX:010B INT 13 -XXXX:010D INT 3 -E 0180 0 0 0002;(写入参数) -G 100 DM低级格式化方法 用DM进行低级格式化 DM的全名是Hard Disk Management Program,它能对硬盘进行低级格式化、校验等管理工作,可以提高硬盘的使用效率。总的来说,DM具有如下几个功能:硬盘低级格式化、分区、高级格式化、硬盘参数配置及其它功能。 在实际应用时,dm工具跟普通DOS命令(如fdisk或format)一样,它的命令格式为:ADM [参数] 。其中的参数可取以下值: M DM软件以手工方式进入,如无该参数,DM以自动方式运行,依次执行INITIALIZE. PARTITIONG. PREPARAFION。 C DM软件以彩色方式执行,即运行于彩色显示器上。 P DM软件以PCXT方式管理硬盘。 A DM软件以PCAT方式管理硬盘。 2 DOS 2.XX版本方式。 3 DOS 3.XX版本方式。 4 DOS 4.XX版本方式(仅DM 5.01版有此参数)。 V DM运行于可改变簇长度、根目录项方式。 在实际使用中常用以下两种方式启动: 1、ADM (自动方式。初始化硬盘时很多参数都用默认值几乎不要人工干预)。 2、ADM (手动方式。作格式化时一些参数要人工指定)。 启动dm工具后,用户就可以根据自己的需要选择相应的操作,由于它也是以DOS用户界面的形式存,所以使用起来也十分简捷、明了。 其它低级格式化方法 除了上面介绍的两种低格工具外,还有许多其它低级格式化方法。 1、CMOS中直接操作 如果主板支持,用户可以直接在CMOS对硬盘进行低级格式化,这种方法非常简单、方便,因此如果可能的话,笔者推荐使用这种方法进行硬盘低格。具体操作方法:在开机时根据系统提示进入CMOS Setup(如果是Award等BIOS,会提示按DEL进入CMOSSetup,如果是Intel主板,一般是按F2进入CMOS Setup),接着在CMOS菜单内选择low formatted HardDisk Drive选择,然后根据程序提示进行待低格硬盘,同时回答一些程序提问即可进行硬盘低级格式化。 2、lformat.com程序低格硬盘 除了dm工具外,还有一款比较常见的低格程序是lformat.exe,它是由迈拓公司推出的低级格式化硬盘工具。在DOS状态下运行 lformat.exe后,程序即启动警告界面。在该画面中说明的大概意思是,如果用户使用这个工具时,硬盘内所有数据将丢失,因此推荐在运行它之前备份必要的数据,同时推荐移走所有其它硬盘。如果用户忘记备份数据,而希望退出该程序,则可以按除Y之外的任意键即可,如果用户确认对硬盘进行低格,请按 “Y”键。 如果选择了“Y”后,程序将要求用户选择硬盘或者就对当前硬盘进行低格,接着,问答几个提问,即可开始硬盘低级格式化过程。 编辑本段低格,高格及快格的区别 类型 主要工作 特点 备注 低级格式化 介质检查;磁盘介质测试;划分磁道和扇区;对每个扇区进行编号(C/H/S);设置交叉因子。 只能在DOS环境或自写的汇编指令下进行,低级格式化只能整盘进行,现在硬盘出厂都是经过低格的,实际使用不到万不得已不要使用低格。 低级格式化对硬盘有损伤,如果硬盘已有物理坏道,则低级格式化会更加损伤硬盘,加快报废。低格的时间漫长,比如现在320G硬盘低格可能需要20小时,或更多。 高级格式化 清除数据(写删除标记);检查扇区;重新初始化引导信息;初始化分区表信息; 可以在DOS和操作系统上进行,只能对分区操作。高级格式化只是存储数据,但如果存在坏扇区可能会导致长时间磁盘读写。 DOS下可能有分区识别问题。使用Format命令格式化不会自动修复逻辑坏道,如果发现有坏道,最好使用SCANDISK或WINDOWS系统的磁盘检查功能、还有其它第三方软件进行修复或隐藏,逻辑坏道既可以通过磁盘检查也可以通过低格解决,这取决于是扇区的哪个部分出现了错误。 快速格式化 删除文件分配表;不检查扇区损坏情况; 可以在DOS和操作系统上进行,只能对分区操作。快速格式化也只是存储数据 DOS下可能有分区识别问题。另外,似乎Linux系统没有快速格式化命令。 |
|