• 读写U盘(FAT32)引导扇区


    参考:https://blog.csdn.net/zhanglei8893/article/details/5912903

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

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

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

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

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

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

    文件的簇号在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 
    
  • 相关阅读:
    如何解决加载动态链接库DLL失败,返回0,GetLastError返回错误码126
    如何实现点击激活窗体同时窗体不跑到最前覆盖其他窗体
    数据库04
    数据库03
    数据库02
    数据库01
    Linux02
    Linux01
    软件质量
    HTML04
  • 原文地址:https://www.cnblogs.com/kuangke/p/16883462.html
Copyright © 2020-2023  润新知