从零开始制作 MyOS(二)

news/2025/10/25 16:48:12/文章来源:https://www.cnblogs.com/wanghao-boke/p/19165624

从零开始制作 MyOS(二)

目标

一个简单的,能打印出字符串的 boot 已经做完了,那么接下来做一个加载多个磁盘扇区的功能。

原因

BIOS 在找到一个可引导设备后,加载该引导设备的第一个扇区,也就是扇区号为 0 的扇区,这个扇区只有 512 字节,那么这点空间在扣除引导设备签名和初始化一些寄存器代码后,剩余就没什么空间了,此时就需要加载额外的磁盘扇区,去实现更复杂的功能。

磁盘扇区的功能拓展

  1. 文件系统驱动
  2. 硬件检测和初始化
  3. 保护模式切换代码
  4. 内核加载器

磁盘介绍

  1. 一个磁盘由多个盘面组成,比如一个光盘,就是正反两个盘面。盘片的表面涂有磁性物质,这些磁性物质用来记录二进制数据。因为正反两面都可涂上磁性物质,故一个盘片可能会有两个盘面
  2. 盘片是一个圆盘,被划分成一个个同心圆形状的磁道。每个磁盘又被由圆心处按照一定角度射出来的直线划分为一个个扇区,每个扇区
  3. 每个盘面对应一个磁头。所有的磁头都是连在同一个磁臂上的,因此所有磁头只能“共进退”。所有盘面中相对位置相同的磁道组成柱面
  4. 所以磁盘的物理地址分为:柱面号,盘面号,扇区号,这样通过这三个值就能定位任意一个磁盘块。

加载磁盘的步骤

  1. 初始化环境,建立稳定的运行环境:cli,sti,段寄存器等
  2. 设置磁盘参数,读取指定位置:dl,dh,ch,cl
  3. 设置目标地址,指定内存加载位置:es:bx
  4. 调用 BIOS 服务,执行磁盘读取动作:int 0x13(AH=0x02)
  5. 错误检查,检查读取是否成功:jc

相关的参数

  1. AH = 0x02:读扇区功能号
  2. AL = 要读的扇区数(通常为 1)
  3. CH = 柱面号(Cylinder)
  4. CL = 扇区号(Sector,1开始)
  5. DH = 磁头号(Head)
  6. DL = 驱动器号(0x00=软盘,0x80=第一个硬盘)
  7. ES:BX = 目标内存地址(读到哪里)

代码

; boot.asm - BIOS boot sector with multi-sector loading
; Assembled with: nasm -f bin -o boot.bin boot.asmorg 0x7C00      ; BIOS加载引导扇区到内存0x7C00处
bits 16         ; 16位实模式代码;============= 初始化阶段 =============
start:; 初始化段寄存器和栈cli         ; 禁用中断(防止在设置过程中被中断)xor ax, ax  ; AX清零(比mov ax,0更高效)mov ds, ax  ; 数据段寄存器DS=0mov es, ax  ; 额外段寄存器ES=0mov ss, ax  ; 堆栈段寄存器SS=0mov sp, 0x7C00 ; 栈指针SP=0x7C00(向下增长)sti         ; 启用中断;============= 磁盘加载阶段 =============call load_disk  ; 调用磁盘加载例程; 显示加载信息mov si, loading_msgcall print_string; 成功加载后跳转到加载的代码mov si, success_msgcall print_stringjmp 0x0000:0x8000 ; 跳转到加载的第二阶段代码;============= 磁盘加载函数 =============
load_disk:; 设置磁盘读取参数(CHS模式)mov dl, 0x80    ; 驱动器号(0x80=第一硬盘)mov dh, 0       ; 磁头号mov ch, 0       ; 柱面号mov cl, 2       ; 起始扇区号(1-based)mov al, 4       ; 要加载的扇区数(4*512=2048字节)mov bx, 0x8000  ; 目标地址ES:BX=0x0000:0x8000; 调用BIOS磁盘服务mov ah, 0x02    ; 功能号0x02=读扇区int 0x13        ; 调用BIOS磁盘中断; 错误处理应紧跟int 0x13jc disk_error   ; 如果CF=1(出错)则跳转ret             ; 成功返回;============= 错误处理 =============
disk_error:mov si, error_msgcall print_stringmov si, retry_msgcall print_string; 等待按键xor ah, ah      ; 功能号0=等待按键int 0x16        ; 调用BIOS键盘服务; 尝试热重启int 0x19        ; BIOS重启服务;============= 字符串打印函数 =============
print_string:lodsb           ; 加载SI指向的字符到AL,并递增SItest al, al     ; 测试AL是否为0(字符串结束)jz .done        ; 如果是则跳转到.done; 使用BIOS显示字符功能mov ah, 0x0E    ; 功能号0x0E=显示字符mov bh, 0       ; 显示页面0int 0x10        ; 调用BIOS视频服务jmp print_string ; 继续处理下一个字符
.done:ret             ; 返回;============= 数据区 =============
loading_msg db "Loading sectors... ", 0
success_msg db "OK", 0xD, 0xA, "Booting...", 0
error_msg db "Error!", 0xD, 0xA, 0
retry_msg db "Press any key to reboot", 0;============= 引导签名 =============
times 510 - ($ - $$) db 0  ; 填充剩余空间(510字节)
dw 0xAA55                  ; 引导扇区签名(最后2字节)

编译步骤

nasm -f bin -o boot.bin boot.asm# 创建磁盘镜像并写入引导扇区
dd if=/dev/zero of=disk.img bs=512 count=2048
dd if=boot.bin of=disk.img conv=notrunc# 将代码写入后续扇区
# dd if=kernel.bin of=disk.img bs=512 seek=1 conv=notruncqemu-system-x86_64 -nographic -serial mon:stdio -drive format=raw,file=disk.img

运行结果

Booting from Hard Disk...
Loading sectors... OK
Booting...

如果能看到这样结果,就说明运行成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/946266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux网络】Socket编程:UDP网络编程达成ChatServer

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:告别内网困局:cpolar破解Websocket远程访问难题

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年钛白粉源头厂家最新推荐排行榜:高分子材料领域专家解析改性技术与行业应用案例

引言 本次钛白粉源头厂家推荐排行榜,是结合中国化工协会高分子材料专业委员会 2024 - 2025 年度测评数据生成,测评覆盖全国 23 个省份共 86 家钛白粉生产企业,采用 “技术实力 + 产品质量 + 服务能力 + 市场口碑” …

如何通过限制网络访问来降低服务器被攻击的风险? - 指南

如何通过限制网络访问来降低服务器被攻击的风险? - 指南2025-10-25 16:38 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important;…

2025 年泳池设备厂家推荐:Firsle 法思乐泳池水处理与海洋馆维生系统设备专业方案及一体化设备优势解析

行业背景 近年来,居民生活品质提升推动私家泳池、民宿泳池需求持续增长,文旅产业扩张带动大型商业泳池、海洋馆项目密集落地,市场对水处理设备的专业性、稳定性与智能化要求显著提高。传统设备普遍存在安装流程复杂…

Axure: 多级多选可交互树状列表 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年工业木托盘批发厂家权威推荐榜单:实木叉车托盘/物流木托盘/免熏蒸木托源头厂家精选

在物流与供应链效率至关重要的今天,工业木托盘作为仓储运输的基础载体,其质量直接关系到整个物流系统的安全与效率。 根据市场调研数据显示,2025年华东地区标准化托盘使用率将突破68%,其中无锡作为苏南物流集散中心…

2025年废气治理设备厂家推荐排行榜,废气处理设备,工业废气净化装置,有机废气处理系统公司精选

2025年废气治理设备厂家推荐排行榜:工业废气净化装置与有机废气处理系统公司精选 随着环保政策的日益严格和工业绿色转型的加速推进,废气治理设备市场正迎来前所未有的发展机遇。工业废气净化装置和有机废气处理系统…

2025年托辊输送带直销厂家权威推荐榜单:输送机托辊/托辊设备/托辊配件源头厂家精选

在工业输送系统领域,托辊作为关键部件,其质量直接影响输送带的运行效率和使用寿命。据行业报告显示,2025年中国输送机托辊市场容量已达数十亿元级别,全球市场预计在预测期内将以稳定增长率持续扩大。 在工业输送系…

2025年提升机厂家权威推荐榜:自动提升机、垂直提升机、斗式提升机,高效输送设备源头厂家精选

2025年提升机厂家权威推荐榜:自动提升机、垂直提升机、斗式提升机,高效输送设备源头厂家精选 在工业自动化快速发展的今天,提升机作为物料输送系统的核心设备,其性能直接影响生产效率和运营成本。自动提升机、垂直…

2025 年最新冲压油供应厂家权威榜单:聚焦空调加工适配性与免清洗技术,助力企业精准选品免清洗/铝翅片/定子转子/高速冲压油厂家推荐

引言 在空调制造行业,翅片冲压油的品质对生产至关重要。为给企业提供可靠选择,中国制冷空调工业协会联合行业专家开展 2025 年翅片冲压油供应厂家测评。测评采用 “三维九项” 体系,从产品性能(润滑性、冷却性、抗…

ttkefu与下一代人机协同客服:重塑服务生态的智能引擎

ttkefu与下一代人机协同客服:重塑服务生态的智能引擎 在数字化浪潮与人工智能技术深度融合的当下,客户服务领域正经历一场由“人机协同”驱动的革命性变革。作为全渠道智能客服系统的标杆,ttkefu凭借其前瞻性的技术…

2025年企业数字化展厅定制厂家权威推荐榜单:企业数字展厅/企业创意展厅/企业智能展厅源头厂家精选

在数字化浪潮的推动下,企业展厅已从静态展示空间逐步升级为集智能交互、数据可视化和沉浸式体验于一体的战略枢纽,成为企业品牌建设与数字化转型的关键一环。 本文将基于行业技术实力、项目案例积累、全流程服务能力…

2025年仿石漆厂家推荐排行榜,外墙仿石漆,真石漆,质感涂料,水包砂,仿石涂料优质供应商精选

2025年仿石漆厂家推荐排行榜:外墙仿石漆、真石漆、质感涂料、水包砂、仿石涂料优质供应商精选 在建筑装饰材料领域,仿石漆凭借其卓越的装饰效果和实用性能,已成为外墙装饰的主流选择。随着2025年的到来,建筑行业对…

实用指南:Nginx 访问控制、用户认证、HTTPS配置实操手册

实用指南:Nginx 访问控制、用户认证、HTTPS配置实操手册pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

蓝队中的SOC角色解析:从初级分析师到职业发展路径

本文深入探讨安全运营中心在蓝队中的职能定位,分析从L1分析师开始的职业发展路径,涵盖安全层级结构、蓝队职责分工以及SOC服务提供商类型等核心内容,为网络安全从业者提供清晰的职业规划指导。独家内容:蓝队中的SO…

Electron 应用自动更新方案:electron-updater 完整指南

1. 概述 electron-updater 是 Electron 社区广泛采用的自动更新解决方案,通常与 electron-builder 配合使用。该库封装了跨平台的更新逻辑(支持 macOS、Windows、Linux),并通过事件回调机制让主进程能够在不同更新…

2025年包装机厂家权威推荐榜单:自动包装机、半自动包装机最新选购指南与行业趋势解析

2025年包装机厂家权威推荐榜单:自动包装机、半自动包装机最新选购指南与行业趋势解析 一、包装机行业发展趋势与市场格局 随着制造业智能化转型的深入推进,包装机械行业正迎来技术革新的关键时期。自动包装机和半自动…

《ESP32-S3使用指南—IDF版 V1.6》第四十三章视频播放器实验

第四十三章视频播放器实验 1)实验平台:正点原子DNESP32S3开发板 2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6 3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659 4)全套实验源码+手…

2025年清洗剂厂家权威推荐榜:水基型清洗剂、工业清洗剂、精密仪器清洗剂源头厂家综合测评与选购指南

2025年清洗剂厂家权威推荐榜:水基型清洗剂、工业清洗剂、精密仪器清洗剂源头厂家综合测评与选购指南 在制造业高质量发展的背景下,清洗剂作为工业生产中不可或缺的辅助材料,其技术水平和产品质量直接影响生产效率和…