软盘结构及软盘数据的读取

由于最近在学习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)

; -------------------------------------------------------------------
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值