bini
驱动牛犊
驱动牛犊
  • 注册日期2002-05-12
  • 最后登录2009-05-13
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望32点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
阅读:1978回复:16

磁盘问题:请问我是用I/O来操作还是以INT 13来操作的好?请给实例

楼主#
更多 发布于:2002-07-09 16:50
请问我是用I/O来操作还是以INT 13来操作的好?
请您给出实例,我从I/O里读出来的厂商写入的参数和其它方式
取得的不一样.数值都让已让我头大.
再别说读和写了操作了.
还有逻辑扇区和物理扇区的计算方式.

请写过这些程序的同志给实例.
正在看Linux内核分析,太长了,自己也慢慢找一些资料.

麻烦各位.

Bini.Yi 2002/07/09
http://www.ufoit.com 计匠网
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-09 16:54
用IO太底层,你需要管的东西太多。
用int 13h要好些,BIOS替你干了不少事
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-09 21:11
不知道你所问的是什么意思?如果是在9X下,可以通过INT13的方式来读写磁盘,但是在NT/2K下是不可以的
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-09 21:15
不知道你所问的是什么意思?如果是在9X下,可以通过INT13的方式来读写磁盘,但是在NT/2K下是不可以的

他显然不用操作系统
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
bini
驱动牛犊
驱动牛犊
  • 注册日期2002-05-12
  • 最后登录2009-05-13
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望32点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-09 21:49
正在用int 13h 做但现在的问题是我取得的数值由谁说了算.
象int 13h这边取到的是239个head,而产商256字里头的是15个head.

    我的是富土6.4G的笔记本硬盘.和日立的20G的笔记本硬盘.
取得的数值都不同.最后相剩的结果也是让人掉眼镜.可能是我看到的算法太多了吧.谁有一个正确的算法?或者用int 13h的哪个功能直接得到总扇区?

注:Bios支持int 13h扩展.
http://www.ufoit.com 计匠网
bini
驱动牛犊
驱动牛犊
  • 注册日期2002-05-12
  • 最后登录2009-05-13
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望32点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-09 21:50
正在用int 13h 做但现在的问题是我取得的数值由谁说了算.
象int 13h这边取到的是239个head,而产商256字里头的是15个head.

    我的是富土6.4G的笔记本硬盘.和日立的20G的笔记本硬盘.
取得的数值都不同.最后相剩的结果也是让人掉眼镜.可能是我看到的算法太多了吧.谁有一个正确的算法?或者用int 13h的哪个功能直接得到总扇区?

注:Bios支持int 13h扩展.

now,我正在试48H号功能.但是那个Qword值让又让我现在的大脑头晕了.我这两天算得太多了...都不相信计算机和自己了.请同志们能我一个算法.

[编辑 -  7/9/02 by  bini]
http://www.ufoit.com 计匠网
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-09 21:58
正在用int 13h 做但现在的问题是我取得的数值由谁说了算.
象int 13h这边取到的是239个head,而产商256字里头的是15个head.

    我的是富土6.4G的笔记本硬盘.和日立的20G的笔记本硬盘.
取得的数值都不同.最后相剩的结果也是让人掉眼镜.可能是我看到的算法太多了吧.谁有一个正确的算法?或者用int 13h的哪个功能直接得到总扇区?

注:Bios支持int 13h扩展.

now,我正在试48H号功能.但是那个Qword值让又让我现在的大脑头晕了.我这两天算得太多了...都不相信计算机和自己了.请同志们能我一个算法.

[编辑 -  7/9/02 by  bini]

劝你相信Bios的话吧,它如果错了,你的机器应该起不来了
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
roger_ding
驱动牛犊
驱动牛犊
  • 注册日期2002-06-03
  • 最后登录2008-10-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-10 00:04
其实支持扩展int13的话,就不用读磁头和磁道了,可以直接读扇区,因为它是线性的。
本人这两天也在搞这个,可是int13只能在dos的exe里调用,能在NE文件或VXD中调吗?你用的是什么方法?
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-10 01:31
其实支持扩展int13的话,就不用读磁头和磁道了,可以直接读扇区,因为它是线性的。
本人这两天也在搞这个,可是int13只能在dos的exe里调用,能在NE文件或VXD中调吗?你用的是什么方法?


应该可以在“NE文件或VXD中调”的吧!?!

 :(
[color=red]大头鬼! :P[/color]
shyeagle
驱动老牛
驱动老牛
  • 注册日期2002-04-30
  • 最后登录2007-07-31
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-10 11:43
INT 13读出的是逻辑参数,厂商给出的的是物理参数,二者不一样是很正常的。直接调用INT 13是不会错的。除非是非常古老的硬盘,否则建议用LBA方式,CHS方式不能访问8.4G以上的区域。
[url=http://www.01study.com]01空间网[/url] [url=http://www.01study.com/forum/dispbbs.asp?boardID=73&ID=193&skin=0]版主招募[/url] [img]http://shy2003.vip.sina.com/map/yjs.gif[/img]
bini
驱动牛犊
驱动牛犊
  • 注册日期2002-05-12
  • 最后登录2009-05-13
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望32点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-10 12:50
请问用1nt13h 功能 48h取到的值.从10h到17h这两个QWORD值怎么算出总扇区数的?真是搞倒我算数都不会了啊!!
头都气大了.
http://www.ufoit.com 计匠网
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2002-07-10 12:57
INT 13?在Intel x86机器上,INT 13不是被处理器保留用作一般保护异常中断吗?如果INT 13可以的话,那一般保护异常中断怎么处理?!
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-07-10 13:02
INT 13?在Intel x86机器上,INT 13不是被处理器保留用作一般保护异常中断吗?如果INT 13可以的话,那一般保护异常中断怎么处理?!

施主,他说的是实模式的
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
bini
驱动牛犊
驱动牛犊
  • 注册日期2002-05-12
  • 最后登录2009-05-13
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望32点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-07-10 14:03
麻烦在写操作系统或Linux或对硬盘处理等各位同志的帮忙了.

:(

本人正计算中...
http://www.ufoit.com 计匠网
yanghui
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2009-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-07-10 15:48
引用:
/
正在用int 13h 做但现在的问题是我取得的数值由谁说了算.
象int 13h这边取到的是239个head,而产商256字里头的是15个head.

/
正如shyeagle兄说的,一个是逻辑参数,一个是物理参数,239是采用LBA模式读取的,是逻辑上的参数,16是物理参数,也即硬盘真正的磁头个数,建议好好看看有关INT 13,硬盘规格参数,LBA/NORMAL/LARGE模式的定义,调用INT 13有的给出的是逻辑参数,有的功能给出的是物理参数,MSDN中有扩展INT 13功能的说明,至于QWORD的访问,根据我的经验,比如内存中是这样的:
aa bb cc dd ee ff gg hh
实际上的值应为hhggffeeddccbbaa,具体先看看手册上的说明,再实际上根据你硬盘的大小不难推断出应如何访问
bini
驱动牛犊
驱动牛犊
  • 注册日期2002-05-12
  • 最后登录2009-05-13
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望32点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-07-10 16:23
终于被算出.谢谢各位,下面就是读写测试了.
这台笔记本的in13h 能读出物理参数.终于明白为什么了.
Yanghui 回复正确.
http://www.ufoit.com 计匠网
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-06-10 10:07
搭车问一下:如何检测硬盘有无坏扇区?坏扇区能不能写数据?
游客

返回顶部