<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://gentoo-zh.org/extern.php?action=feed&amp;tid=306&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Gentoo中文社区 / 硬盘BPB信息]]></title>
		<link>http://www.gentoo-zh.org/viewtopic.php?id=306</link>
		<description><![CDATA[硬盘BPB信息 最近发表的帖子。]]></description>
		<lastBuildDate>Fri, 26 Aug 2022 06:05:34 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[硬盘BPB信息]]></title>
			<link>http://www.gentoo-zh.org/viewtopic.php?pid=312#p312</link>
			<description><![CDATA[<p>BS_OEMName&#160; &#160; DB &#039;ForrestY&#039;&#160; &#160; ; OEM String, 必须 8 个字节<br />&#160; &#160; BPB_BytsPerSec&#160; &#160; DW 512&#160; &#160; &#160; &#160; ; 每扇区字节数<br />&#160; &#160; BPB_SecPerClus&#160; &#160; DB 1&#160; &#160; &#160; &#160; ; 每簇多少扇区<br />&#160; &#160; BPB_RsvdSecCnt&#160; &#160; DW 1&#160; &#160; &#160; &#160; ; Boot 记录占用多少扇区<br />&#160; &#160; BPB_NumFATs&#160; &#160; DB 2&#160; &#160; &#160; &#160; ; 共有多少 FAT 表<br />&#160; &#160; BPB_RootEntCnt&#160; &#160; DW 224&#160; &#160; &#160; &#160; ; 根目录文件数最大值<br />&#160; &#160; BPB_TotSec16&#160; &#160; DW 2880&#160; &#160; &#160; &#160; ; 逻辑扇区总数<br />&#160; &#160; BPB_Media&#160; &#160; DB 0xF0&#160; &#160; &#160; &#160; ; 媒体描述符<br />&#160; &#160; BPB_FATSz16&#160; &#160; DW 9&#160; &#160; &#160; &#160; ; 每FAT扇区数<br />&#160; &#160; BPB_SecPerTrk&#160; &#160; DW 18&#160; &#160; &#160; &#160; ; 每磁道扇区数<br />&#160; &#160; BPB_NumHeads&#160; &#160; DW 2&#160; &#160; &#160; &#160; ; 磁头数(面数)<br />&#160; &#160; BPB_HiddSec&#160; &#160; DD 0&#160; &#160; &#160; &#160; ; 隐藏扇区数<br />&#160; &#160; BPB_TotSec32&#160; &#160; DD 0&#160; &#160; &#160; &#160; ; wTotalSectorCount为0时这个值记录扇区数<br />&#160; &#160; BS_DrvNum&#160; &#160; DB 0&#160; &#160; &#160; &#160; ; 中断 13 的驱动器号<br />&#160; &#160; BS_Reserved1&#160; &#160; DB 0&#160; &#160; &#160; &#160; ; 未使用<br />&#160; &#160; BS_BootSig&#160; &#160; DB 29h&#160; &#160; &#160; &#160; ; 扩展引导标记 (29h)<br />&#160; &#160; BS_VolID&#160; &#160; DD 0&#160; &#160; &#160; &#160; ; 卷序列号<br />&#160; &#160; BS_VolLab&#160; &#160; DB &#039;OrangeS0.02&#039;; 卷标, 必须 11 个字节<br />&#160; &#160; BS_FileSysType&#160; &#160; DB &#039;FAT12&#160; &#160;&#039;&#160; &#160; ; 文件系统类型, 必须 8个字节&#160; </p><br /><p>读软盘 中断13h<br />------------------------------------------------------------------------------------------<br />中断号&#160; &#160; &#160; &#160; |&#160; &#160; &#160; &#160; &#160; &#160; 寄存器&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;|&#160; 作用&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;|<br />------------------------------------------------------------------------------------------<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; |ah=00h&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; dl=驱动器号(0表示A盘)&#160; &#160; &#160; |&#160; 复位软驱&#160; &#160; &#160; &#160; &#160; &#160;|<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; |---------------------------------------------------------------------------<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; |ah=02h&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; al=要读取的扇区数&#160; &#160; &#160; &#160; &#160; |从磁盘将数据读&#160; &#160; &#160; &#160;|<br />13h&#160; &#160; &#160; &#160; &#160; &#160;|ch=柱面(磁道)号&#160; &#160; &#160; &#160; &#160; &#160;cl=起始扇区号&#160; &#160; &#160; &#160; &#160; &#160; &#160; |入es:bx指向的&#160; &#160; &#160; &#160; |<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; |dh=磁头号&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;dl=驱动器号(0表示A盘)&#160; &#160; &#160; |缓冲区&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;|<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; |es:bx-&gt;数据缓冲区&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;|&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;|<br />-----------------------------------------------------------------------------------------</p><br /><br /><br /><br /><p>BPB参数<br />&#160; &#160; &#160; 好了，接下来重点来了。首先，最开始的3各字节的数据分别是跳转指令与空指令，因为在汇编当中0xEB是跳转指令，0x58是跳转的地址，而0x90则是空指令。至于为什么要在这里放上一句跳转指令呢，这个还得从启动区开始讲起，为了节约篇幅，我就简单介绍一下：一般第一个扇区叫做启动区，cpu把扇区当中的数据当作指令来执行，当读取到EB 58 这个指令时，遍跳转到0x58这个地址并继续读取指令来执行，而0x58地址之后的内容通常都是载入操作系统的指令。如果希望知道详细内容的读者不妨去看一下《30天自制操作系统》这本书，第一天结尾部分有很详细的说明。总之这边的话FAT32规定这个3各字节的内容必须是EB 58 90，只要记住就行了（笑）。(如1L所说，EB 58 90 对应汇编代码即为JUMP 0x58; NOP;)。</p><p>&#160; &#160; &#160; &#160;而从0x03~0x0A这8个字节的数据表示OEM，这里即为“MSDOS5.0”。</p>]]></description>
			<author><![CDATA[dummy@example.com (batsom)]]></author>
			<pubDate>Fri, 26 Aug 2022 06:05:34 +0000</pubDate>
			<guid>http://www.gentoo-zh.org/viewtopic.php?pid=312#p312</guid>
		</item>
	</channel>
</rss>
