您的位置:首页 > 其它

读写U盘(FAT32)引导扇区

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

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

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

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



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



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

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

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

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

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

[c-sharp]
view plain
copy
print?

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   


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: