自己动手写操作系统之----loader

简介: 将磁盘格式化为FAT12文件系统.Source code: 点击(此处)折叠或打开;%define _BOOT_DEBUG_ ; 做 Boot Sector 时一定将此行注释掉!将此行打开后用 nasm Boot.
将磁盘格式化为FAT12文件系统.
Source code:

点击(此处)折叠或打开

  1. ;%define _BOOT_DEBUG_ ; 做 Boot Sector 时一定将此行注释掉!将此行打开后用 nasm Boot.asm -o Boot.com 做成一个.COM文件易于调试
  2. %ifdef _BOOT_DEBUG_
  3. org 0100h ; 调试状态, 做成 .COM 文件, 可调试
  4. %else
  5. org 07c00h ; Boot 状态, Bios 将把 Boot Sector 加载到 0:7C00 处并开始执行
  6. %endif
  7. jmp short LABEL_START ; Start to boot.
  8. nop ; 这个 nop 不可少
  9. ; 下面是 FAT12 磁盘的头
  10. BS_OEMName DB 'ForrestY' ; OEM String, 必须 8 个字节
  11. BPB_BytsPerSec DW 512 ; 每扇区字节数
  12. BPB_SecPerClus DB 1 ; 每簇多少扇区
  13. BPB_RsvdSecCnt DW 1 ; Boot 记录占用多少扇区
  14. BPB_NumFATs DB 2 ; 共有多少 FAT 表
  15. BPB_RootEntCnt DW 224 ; 根目录文件数最大值
  16. BPB_TotSec16 DW 2880 ; 逻辑扇区总数
  17. BPB_Media DB 0xF0 ; 媒体描述符
  18. BPB_FATSz16 DW 9 ; 每FAT扇区数
  19. BPB_SecPerTrk DW 18 ; 每磁道扇区数
  20. BPB_NumHeads DW 2 ; 磁头数(面数)
  21. BPB_HiddSec DD 0 ; 隐藏扇区数
  22. BPB_TotSec32 DD 0 ; 如果 wTotalSectorCount 是 0 由这个值记录扇区数
  23. BS_DrvNum DB 0 ; 中断 13 的驱动器号
  24. BS_Reserved1 DB 0 ; 未使用
  25. BS_BootSig DB 29h ; 扩展引导标记 (29h)
  26. BS_VolID DD 0 ; 卷序列号
  27. BS_VolLab DB 'Tinix0.01 '; 卷标, 必须 11 个字节
  28. BS_FileSysType DB 'FAT12 ' ; 文件系统类型, 必须 8个字节
  29. LABEL_START:
  30. mov ax, cs
  31. mov ds, ax
  32. mov es, ax
  33. Call DispStr ; 调用显示字符串例程
  34. jmp $ ; 无限循环
  35. DispStr:
  36. mov ax, BootMessage
  37. mov bp, ax ; ES:BP = 串地址
  38. mov cx, 16 ; CX = 串长度
  39. mov ax, 01301h ; AH = 13, AL = 01h
  40. mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
  41. mov dl, 0
  42. int 10h ; int 10h
  43. ret
  44. BootMessage: db "Hello, OS world!"
  45. times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
  46. dw 0xaa55 ; 结束标志

目录
相关文章
|
Linux 开发者 Windows
第十九章、【Linux】开机流程、模块管理与Loader
第十九章、【Linux】开机流程、模块管理与Loader
76 0
|
3月前
|
XML Ubuntu Linux
部署08---扩展-Win10配置WSL(Ubuntu)环境,WSL系统是什么意思,是Windows系统上的一个子系统, xml的一大特点是直链系统,直接链接你的CPU,硬盘和内存,如何用 WSL部署
部署08---扩展-Win10配置WSL(Ubuntu)环境,WSL系统是什么意思,是Windows系统上的一个子系统, xml的一大特点是直链系统,直接链接你的CPU,硬盘和内存,如何用 WSL部署
|
10月前
|
Linux 数据安全/隐私保护 Windows
jupyter环境下从零模拟开发简易操作系统: 搭建一个学习ucore_OS学习的环境(第二节)
上一节已经一万字了,只好再加一节 如果想要直接 体验 实验效果 可以直接执行本章的命令 生成的img文件可以在qemu中正常运行的话,那么在 真实硬件上基本 也是可以 正常安装操作系统
45 1
|
缓存 Linux 测试技术
二十五、Linux性能优化实战学习笔记Linux 磁盘I/O是怎么工作的?(下)
使用率、饱和度、IOPS、吞吐量以及响应时间等。这五个指标,是衡量磁盘性能的基本指标。
253 1
|
Linux 芯片
为啥Linux这么大的操作系统使用面向过程语言编写
为啥Linux这么大的操作系统使用面向过程语言编写
|
Linux 网络安全 Android开发
Linux----嵌入式交叉编译环境 底层文件IO操作
Linux----嵌入式交叉编译环境 底层文件IO操作
|
Ubuntu 编译器 C语言
操作系统实战45讲:HelloOS运行笔记
操作系统实战45讲:HelloOS运行笔记
290 0
操作系统实战45讲:HelloOS运行笔记
|
安全 Linux 调度
【windows kernel源码分析】对初学者友好的底层理解,让你对计算机内核不再迷茫
【windows kernel源码分析】对初学者友好的底层理解,让你对计算机内核不再迷茫
178 0
【windows kernel源码分析】对初学者友好的底层理解,让你对计算机内核不再迷茫
|
JavaScript 安全 前端开发
一份前端够用的 Linux 命令
在翻译完 TypeScript 官方文档后,我用 VuePress 搭建博客,又实现了 GitHub 和 Gitee Pages 的自动部署,但我最终还是决定自己建站,而在建站的过程中,必不可少会用到 Linux 命令,所以此篇写一份基本够用的 Linux 命令,会涵盖博客搭建系列文章用到的各种命令,方便查询和学习使用。
158 0
一份前端够用的 Linux 命令