预备知识:
1、3.5英寸软盘分为上下两面,每面80个磁道,每个磁道18扇区,每个扇区512个字节。
那么,它的容量=2*80*18*512=1474560(字节)=1440KB。
2、数据在磁盘上面是如何存放的?
数据在磁盘上存放顺序如下:
0面 0磁道 1扇区
0面 0磁道 2扇区
...
0面 0磁道 18扇区
1面 0磁道 1扇区
1面 0磁道 2扇区
...
1面 0磁道 18扇区
0面 1磁道 1扇区
0面 1磁道 2扇区
...
0面 1磁道 18扇区
1面 1磁道 1扇区
1面 1磁道 2扇区
...
1面 1磁道 18扇区
...
3、关于逻辑扇区号
逻辑扇区号是对软盘的所有扇区所进行的统一编号,编号从0开始,一直到2879。
4、逻辑扇区号与磁面、磁道及扇区的关系
逻辑扇区号=磁道号*36 + 面号*18 + 扇区号 + 1
扇区号=rem(逻辑扇区号/18) - 1
面号=int(逻辑扇区号/18) & 1
磁道号=int(逻辑扇区号/18)>>1
5、功能号为0x02的int 0x13的用法
输入参数:
ah = 0x02 - 读磁盘扇区到内存;al = 需要读出的扇区数量
ch = 磁道(柱面)号的低8位; cl = 开始扇区(位0-5),磁道号高2位(位6-7)
dh = 磁头号; dl = 驱动器号(如果是硬盘则位7要置位)
输出参数:
es:bx 指向数据缓冲区;如果出错则CF标志置位,ah中是出错码。
设计与实现
1、算法
; ---------------- 输入参数 ---------------- ; 软盘的起始逻辑扇区号logic ; 要读取的扇区数sectors ; es:bx: 指向接收从扇区读入数据的合法内存区 start: if(sectors==0) return ah = 0x02 al = 1 ch = int(logic/18)>>1 cl = rem(logic/18) - 1 dh = int(logic/18) & 1 dl = 0 if(++bx==0) { es=es+0x1000 } int 0x13 logic++ sectors-- goto start
|
2、实现
|
文件: | read_it.rar |
大小: | 1KB |
下载: | 下载 |
|
阅读(2073) | 评论(0) | 转发(0) |