Chinaunix首页 | 论坛 | 博客
  • 博客访问: 127280
  • 博文数量: 49
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -15
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-03 22:22
个人简介

小楼一夜听春雨

文章分类
文章存档

2017年(1)

2016年(2)

2015年(5)

2014年(21)

2013年(5)

2012年(7)

2010年(6)

2009年(2)

我的朋友

分类:

2009-10-05 11:26:42

预备知识:
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) |
0

上一篇:没有了

下一篇:最大公子串问题

给主人留下些什么吧!~~