软盘结构及软盘数据的读取
由于最近在学习linux0.11内核,需要用到软盘启动,于是就抽空学习了一下软盘结构;
1、软盘结构
1.44软盘结构:2个盘面(0和1),一个盘面有80条磁道(或称磁柱),一个磁道有18个扇区,一个扇区大小为512Byte,于是软盘总容量:2*80*18*512Byte=1474560Byte=1.44M;
2、相对扇区号及转换
在系统中,于是可以通过盘面+磁道+扇区,就访问到相应的内容,但这明显比较繁琐,于是为了管理和使用方面,就有了相对扇区号概念,实质是给每个扇区编号;
相对扇区即从0开始依次对磁盘上的扇区进行编号,具体情况如下:
编号顺序:
扇区物理号 相对扇区号
0面,0道,1扇区 0
0面,0道,2扇区 1
0面,0道,3扇区 2
…………………….
0面,0道,18扇区 17
1面,0道,1扇区 18
……………
1面,0道,18扇区 35
0面,1道,1扇区 36
...................
0面,1道,18扇区 53
1面,1道,1扇区 54
于是从上述编号可以推算出相对扇区号的计算方法:
相对扇区号={盘面(0~1)*每条磁道扇区数(18)} + {2*磁道(0~79)*每条磁道扇区数(18)} + {扇区(1-18)-1};
而当知道相对扇区号,怎么推算出盘面、磁道、扇区呢?
具体步骤:
(1)从上面公式可以看出,相对扇区号对每条磁道扇区数(18)取余数 加1 就得到扇区;
(2)再根据(1)得到的商,如果盘面为1则商为奇数,否则为偶数,于是通过判断商的奇偶性,就可以得出盘;同时也可以算出磁道;
3、软盘读写
在系统中,是怎么读和写软盘?
通过BIOS中断13,详细见下图:
其中:
磁盘号:指的是软盘中的磁道或磁柱;
扇区号:指的是软盘的扇区;
CH存放磁道的低8位,CL的高两位存放磁道的高2位,CL的低6位存放扇区
磁头号:指的是软盘中的盘面;
驱动器号:指具体的软盘,如软盘A,软盘B...
CF为1则表示读取错误;
4、实例
通过如下具体的例子,大家可以更好的理解;(注:以下例子摘自网上http://blog.csdn.net/littlehedgehog/article/details/2147361)
; 函数名: ReadSector
; ----------------------------------------------------------------------------
; 作用:
; 从第 ax 个 Sector 开始, 将 cl 个 Sector 读入 es:bx 中
ReadSector:
; -----------------------------------------------------------------------
; 怎样由扇区号求扇区在磁盘中的位置 (扇区号 -> 柱面号, 起始扇区, 磁头号)
; -----------------------------------------------------------------------
; 设扇区号为 x
; ┌ 柱面号 = y >> 1
; x ┌ 商 y ┤
; -------------- => ┤ └ 磁头号 = y & 1
; 每磁道扇区数 │
; └ 余 z => 起始扇区号 = z + 1
push bp
mov bp , sp
sub esp , 2 ; 辟出两个字节的堆栈区域保存要读的扇区数: byte [bp-2]
mov byte [ bp-2 ] , cl
push bx ; 保存 bx
mov bl , [ BPB_SecPerTrk ] ; bl: 除数
div bl ; y 在 al 中, z 在 ah 中
inc ah ; z ++
mov cl , ah ; cl <- 起始扇区号
mov dh , al ; dh <- y
shr al , 1 ; y >> 1 (其实是 y/BPB_NumHeads, 这里BPB_NumHeads=2)
mov ch , al ; ch <- 柱面号
and dh , 1 ; dh & 1 = 磁头号
pop bx ; 恢复 bx
; 至此, "柱面号, 起始扇区, 磁头号" 全部得到 ^^^^^^^^^^^^^^^^^^^^^^^^
mov dl , [ BS_DrvNum ] ; 驱动器号 (0 表示 A 盘)
.GoOnReading:
mov ah , 2 ; 读
mov al , byte [ bp-2 ] ; 读 al 个扇区
int 13h
jc .GoOnReading ; 如果读取错误 CF 会被置为 1, 这时就不停地读, 直到正确为止
add esp , 2
pop bp
ret
5、总结
在软件中,可以通过层层封装实现设备访问的简单;
软盘结构及软盘数据的读取相关推荐
- 磁头号和起始扇区的计算方法------软盘结构
最近在看<自已动手写操作系统>这本书,读到第四章关于从软盘读取文件一节时一开始不能理解,特别是看不懂书中所附的源代码.经过自己查询软盘结构资料,通过本文对自己软盘的磁头号.磁道号和起始扇区 ...
- 软盘结构 磁头号和起始扇区的计算方法
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 软盘结构 ...
- 3.5寸1.44M软盘结构
一.3.5寸1.44M软盘结构 1. 结构:2面.80道/面.18扇区/道.512字节/扇区 扇区总数=2面 X 80道/面 X 18扇区/道 = 2880扇区 ...
- 制作FAT12软盘以查看软盘的根目录条目+文件属性+文件内容
[-1]Before for specific info , please visit http://wiki.osdev.org/Loopback_Device [0]我们先上干货,看到效果后,我们 ...
- python读取html文件中的表格数据_Python 读取各类文件格式的文本信息 | doc,excel,html,mht...
原标题:Python 读取各类文件格式的文本信息 | doc,excel,html,mht 众所周知,python最强大的地方在于,python社区汇总拥有丰富的第三方库,开源的特性,使得有越来越多的 ...
- python读取表格数据_Python读取Excel数据并根据列名取值
一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...
- 专利:结构化大数据通信协议
发明专利技术 结构化大数据通信协议 发明人:樊永正 269779216@qqqq.com 技术领域 结构化大数据通信协议是一种通信协议,也是一种让数据成为合格的结构化大数据的技术.结构化大数据通信协议 ...
- c语言 将结构体放在flash,如何将 结构体 的 数据 定义在flash里面,并如何读出来,求各位达人帮助……...
如题,本人不太熟悉GCC,特别是定义在flash和eeprom的数据,所以在做液晶的字库时遇到问题,讲解下思路:用查表的方式,定义一个结构体来装载字符的内码和字符数据.程序如下: /********* ...
- hadoop 传感器数据_读取模式错误,计算引擎操作复杂……面对Hadoop这些问题该如何应对?...
作者 | Monte Zweben 译者 | 天道酬勤,责编 | Carol 封图 | CSDN 付费下载自视觉中国 Apache Hadoop于2006年出现在IT领域,它使用商品硬件,为组织提供前 ...
最新文章
- 获取JSON格式的树形
- 图片html代码查看器,360度全景商品图片查看器
- C++ 多继承和虚继承的内存布局
- Zabbix5.0监控系统安装详解
- linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
- rxjs interval和take的混合使用
- 你知道你常用的dos和linux命令吗?
- oracle链接失去联系,[Oracle报错]ORA-03135: connection lost contact.
- linux-权限设置--facl基本
- Python GUI界面编程初步 03 - Tkinter基础设计案例
- 第三,四章 数据库和数据表的(增删改查,重命名等)基本操作
- 转载 hashtable和dictionary的区别
- python中读取xlsx文件
- php关闭notice_屏蔽PHP默认设置中的Notice警告的方法
- 金融数据分析(十三)投资组合问题
- c语言专业认知实践报告怎么写,C语言课程设计实习报告范本
- 计算机系大一认识实习报告,大一计算机实习报告范文
- 边缘设备、系统及计算杂谈(20)——Linux systemd了解一下
- shell脚本根据指定日期 得到月初,月末,季初,季末,年初,年末,周开始,周结束,旬初,旬末日期,报表日期
- 光谱成像技术用于河北鸭梨的物理损伤检测
热门文章
- 利用GDAL进行多项式几何校正校正新思路
- 互联网晚报 | 3月4日 星期五 |​ 滴滴公司改变决定,放弃退出俄罗斯市场;张勇卸任海底捞CEO,“最牛服务员”接棒...
- nginx ats squid varnish使用场景对比介绍
- uniapp多语言添加i18n
- sql插入语句返回自增主键
- 自定义导航栏,返回上一页,如果没有上一页返回首页
- 假设你是一个报文,看路由器会如何处理你
- linux获取符号表调试
- 类——面向对象的编程
- Django基础---Form和modelform校验器、同源和跨域问题