看了《自己动手写操作系统》后,也想自己打造一个迷你操作系统,但是书中使用的软盘现在基本已经绝迹了,而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

读写U盘(FAT32)引导扇区相关推荐

  1. 30天自制操作系统 - 取代软盘,用U盘写入引导扇区

    背景 作者是在2006年发布此书的(翻译版是在2012年在中国发售),当时可能还能找到带有软驱的计算机.但是时过境迁,现在已经不存在这种老古董东西了. 简单总结一下学习到第三天的一些更变. 更变 书籍 ...

  2. GRUB4DOS(十二)适用于FAT32的分区引导扇区启动代码

    /* 这份代码将编译后将放到GRLDR文件的0x400开始的地方(即第三个扇区)* 这个扇区的内容将被塞到分区引导扇区* 其中0x00-0x59见文章下方表1.* 0x5a - 0x1fc放引导代码. ...

  3. DBR(分区引导扇区)

    DBR 主要由下列几个部分组成: 1.跳转指令,占用3个字节的跳转指令将跳转至引导代码 2.厂商标识和DOS版本号,该部分总共占用8个字节. 3. BPB(BIOS Parameter BlockBI ...

  4. 警告!从ISO映像创建的U盘可能无法完全启动!Unknown引导扇区不支持NTFS文件系统

    想给自己U盘制作成U盘启动盘,却出现警告!从ISO映像创建的U盘可能无法完全启动!Unknown引导扇区不支持NTFS文件系统. 我试了很多办法,网上也看了很多办法,在这里总结一下. 1.更换U盘启动 ...

  5. linux 汇编 读取软盘,[Linux]dd 读写软盘:在软盘主引导扇区写入显示hello world的二进制代码数据...

    代码效果 在软盘主引导扇区写入显示 hello world 的二进制代码数据 命令行操作 第一步,格式化软盘,/dev/fd0是软盘的名字 $ sudo fdformat /dev/fd0 $ sud ...

  6. syslinux引导扇区不支持ntfs文件系统_实战 FAT12 文件系统

    1. 引言 经过一系列的文章,我们终于完成了从实地址模式跳转到保护模式,并且实现了分段.分页以及保护模式下的中断与异常机制. 保护模式究竟"保护"了什么 可是我们除了最初的时候,在 ...

  7. 主引导扇区及主引导记录MBR的详细说明

    引导扇区在每个分区里都存在,但是我们常说的*主引导扇区*是硬盘的 第一物理扇区.它由两个部分组成:即主引导记录MBR和硬盘分区表DPT.在 总共512字节的主引导分区里其中MBR占446个字节(偏移0 ...

  8. 硬盘分区丢失不能识别,文件系统损坏,不能读取第一个/第二个NTFS引导扇区的解决方法

    硬盘分区丢失或则文件系统损坏,运行chkdsk 检查提示不能读取第一个/第二个NTFS引导扇区. 目录 一.切忌慌乱,保持冷静(引用某网友,赞同!) 二.弄清数据丢失原因 三.操作系统如何删除文件的 ...

  9. dd 删除引导扇区_[问题求助]--如何删除分区/引导区病毒:Rippe...

    一台电脑的正常启动过程是先读取引导扇区或者主引导记录,加载其进入内存中,然后引导相应系统.而一台感染有引导区病毒的电脑则会先把病毒加载到内存,然后才进行正常的引导过程.在二十世纪八九十年代的时候引导区 ...

最新文章

  1. 深度剖析如何实现事务消息
  2. Android轮播图实现图片圆角,Android开发实现图片圆角的方法
  3. ubuntu18.04.4 LTS 安装NVIDIA驱动亲测有用方法2020年最新及常见问题避坑
  4. VTK:相互作用之ObserverMemberFunction
  5. 戴尔服务器t330可以用无线网卡吗,DELL T330服务器安装windows2008R2系统
  6. 《逻辑与计算机设计基础(原书第5版)》——导读
  7. 8个绝对不能错过的PPT免费素材网站
  8. cad二次开发的一些简单入门实例
  9. html 视频在线播放,HTML 视频(Video)播放
  10. linux忘记git库密码,忘记gitlab的root密码
  11. 高通8155 GPS HAL层代码移植
  12. js escape()_unescape().html
  13. LCN分布式事务学习0-分布式事务理论基础
  14. 纯HTML+JS实现跑酷游戏
  15. 余杭医保卡指定使用医院和药店
  16. 专访UCloud王冬冬:UDDP如何在大数据下抛头露面
  17. 买三种文具编程C语言,C语言程序设计实验的个人物品管理系统程序(33页)-原创力文档...
  18. ACM Fellow 樊文飞 Query in Big Data
  19. 苹果电脑如何启动外置硬盘的linux系统,【苹果MacBookPro评测】在外置SSD上让苹果本运行Windows系统(全文)_苹果 MacBook Pro_笔记本评测-中关村在线...
  20. xcode 10 打包到蒲公英操作流程

热门文章

  1. steam游戏打不开的可能性收集
  2. win10 死机 无响应
  3. 狂神说 SpringBoot 笔记
  4. 安氏图书报刊发行管理软件——图书人自己亲手开发的软件
  5. 安卓 NFC 功能使用小结
  6. Revit2016 笔记04
  7. python入门--安装eclipse并配置PyDev插件(附Anaconda安装教程)
  8. ubuntu i386在32位机器上安装
  9. gnuplot 简单函数绘图
  10. 【转】:胡适致毕业生:在不健全的中国,如何不堕落。