读写U盘(FAT32)引导扇区

       看了《自己动手写操作系统》后,也想自己打造一个迷你操作系统,但是书中使用的软盘现在基本已经绝迹了,而U盘成为一种喜闻乐见的工具。因此想将操作系统写入U盘中,而读写U盘的引导扇区成为成功的关键。

       将U盘格式化为FAT32文件系统,要读写U盘的引导扇区,需要首先了解FAT32的格式。它包含四个部分:

保留扇区 | FAT1 | FAT2 | 数据区。需要注意的是:保留扇区的第一个扇区是引导扇区(DBR)。

其中引导扇区的数据结构为:

读写U盘(FAT32)引导扇区_第1张图片

数据区的开始为主目录区,主目录区包含了文件的熟悉,数据结构如下:

读写U盘(FAT32)引导扇区_第2张图片

根据每个文件起始的簇号,就可以找到文件内容的绝对扇区起始位置

文件的簇号在FAT表中安装链表的形式存放,文件的属性在主目录区安装数组的形式存放。

文件内容的绝对扇区起始位置 = 保留扇区 + FAT1 + FAT2 + (起始簇号 -2)*每簇的扇区数

然后编写引导程序,读入U盘引导扇区,选择从U盘启动,就可以看到自己打造的U盘操作系统了

引导程序的汇编代码如下:

org 07c00h jmp short LABEL_START nop OEM db 'Dirichet' ;//8Bytes Bytes_per_sector dw 512 Sectors_per_cluster db 8 Reserved_sectors dw 584 Number_of_FATs db 2 Root_entries dw 0 Sectors_small dw 0 Media_descriptor db 0f8h Sectors_per_FAT_small dw 0 Sectors_per_track dw 63 Heads dw 255 Hidden_sectors dd 63 Sectors dd 3902913 Sectors_per_FAT dd 3804 Extended_flags dw 0 Version dw 0 Root_dir_1st_cluster dd 2 FSInfo_sector dw 1 Backup_boot_sector dw 6 times 12 db 0 BIOS_drive db 80h db 0 Ext_boot_signature db 29h Volume_serial_number dd 15329558 Volume_label db 'Dirichlet09' ;//11个字节 File_system db 'FAT32 ' ;//8个字节 LABEL_START: mov ax,cs mov ds,ax mov es,ax call DispStr jmp $ DispStr: mov ax,BootMessage mov bp,ax mov cx,15 mov ax,01301h mov bx,000ch mov dl,0 int 10h BootMessage: db 'hello, kitty!', 13, 10, '$' times 510-($-$$) db 0 dw 0xaa55

 

你可能感兴趣的:(数据结构,汇编,File,System,工具,Descriptor)