【30天自制操作系统】day03:读写磁盘
软盘
- 80个柱面,2个磁头,18个扇区
- 每个扇区 512 字节,共 1440 KB
读磁盘汇编
读取 10 个柱面到 0x0820 内存位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | ;读取磁盘 MOV AX,0x0820 MOV ES,AX MOV CH,0 ;柱面 0 MOV DH,0 ;磁头 0 MOV CL,2 ;扇区 2 readloop: MOV SI,0 ;记录失败次数 retry: MOV AH,0x02 ;读盘指令号 MOV AL,1 ;1 个扇区 MOV BX,0 ;ES:BX 为缓冲地址,即 0x8200 MOV DL,0x00 ;A 驱动器 INT 0x13 ;调用磁盘 BIOS JNC next ;jump if not carry 没错跳到 fin ADD SI,1 CMP SI,5 JAE error ;jump if above or equal >5 跳转 MOV AH,0x00 MOV DL,0x00 INT 0x13 ;重置驱动器(系统复位) JMP retry next: MOV AX,ES ADD AX,0x0020 MOV ES,AX ADD CL,1 CMP CL,18 ;读 18 个扇区 JBE readloop MOV CL,1 ADD DH,1 CMP DH,2 ;读 2 个磁头 JB readloop MOV DH,0 ADD CH,1 CMP CH,CYLS ;读 10 个柱面 JB readloop MOV [0x0ff0],CH ;将读取到的柱面数量写入内存地址 0x0ff0 JMP 0xc200 error: MOV SI,msg |
公众号 - 低并发编程

分类:
30天自制操作系统
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?