【30天自制操作系统】day03:读写磁盘
2024-09-01 19:21:55
软盘
- 80个柱面,2个磁头,18个扇区
- 每个扇区 512 字节,共 1440 KB
读磁盘汇编
读取 10 个柱面到 0x0820 内存位置
;读取磁盘
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
最新文章
- MapReduce工作原理讲解
- jquery中取消和绑定hover事件的正确方式
- Oracle数据库编程:使用PL/SQL编写触发器
- 【风马一族_Android】Android 前端内容
- ios开发--网页中调用JS与JS注入
- Proguard 保留native methods的问题
- C#中隐式操作CMD命令行窗口
- perl lwp get uft-8和gbk
- T-SQL函数及用法--转
- 真机iOS SDK升级后xcode不能进行真机调试 怎么办
- ajax传值修改数据
- Hadoop记录-Linux Service
- SVN基础操作
- Flex 自定义 Zlert 组件!
- 04:获取zabbix监控信息
- 事件委托,js中的一种优化方法
- PID算法(C语言)
- 微信小程序登录方案
- ubuntu14.04 忘记了登录密码和root密码
- .net core 实践笔记(二)--EF连接Azure Sql