CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

硬盘I/O口读硬盘信息的问题?

楼主xyyhjk(<我的理想是做一个平凡的人,现在我实现了>)2005-02-28 09:55:14 在 其他开发语言 / 汇编语言 提问

我设置好第一磁盘控制器的01F1H,01F2H,01F3H,01F4H,01F5H,01F6H,然后向01F7H发送0ECH命令,然后从01F0H读出的磁盘信息有问题?问题在哪?程序片段  
  xor     ax,ax  
  mov     dx,01f1h  
  out     dx,al  
  jmp     $+2  
  inc     dx                         ;01f2h  
  out     dx,al  
  jmp     $+2  
  inc     dx                         ;01f3h  
  out     dx,al  
  jmp   $+2  
  inc     dx                         ;01f4h  
  out     dx,al  
  jmp   $+2  
  inc     dx                         ;01f5h  
  out     dx,al  
  jmp     $+2  
  inc     dx                         ;01f6h  
  mov     al,10100000b      
  out     dx,al  
  jmp     $+2  
  inc     dx                         ;01f7h  
  mov     al,0ech                 ;获得磁盘信息命令  
  out     dx,al  
  jmp     $+2  
   
  mov     dx,01f0h  
  mov     cx,100h/2  
  mov     si,offset   buffer         ;缓冲地址  
  rep     insw  
   
  call     show_buffer               ;显示缓冲内容  
   
   
  现在从端口01F0读出的信息不对,问题在哪?  
  谢谢  
  问题点数:20、回复次数:3Top

1 楼terry_followwind()回复于 2005-02-28 15:25:48 得分 20

首先你要去选读哪一个硬盘,master还是slave,而且,用LBA的模式和用INT13有点不一样,LBA0为第一个sector,还有,1f2   port下的是读几个sector,你下的是0,还有要注意的是从1f0要一个word一个word读出来.没时间写code,给你一个在debug下.(只能在dos下用)(LBA   28bit   mode)  
  o   1f6   a0  
  i   1f7       (50   表示ready)  
  o   1f2   1  
  o   1f3   0  
  o   1f4   0  
  o   1f5   0  
  o   1f6   e0   (LBA   enable)  
  o   1f7   20   (PIO   read)  
  i   1f7         (58   ok)  
  i   1f0         (first   word)  
  i   1f0         (second   word)  
  具体想知道你可以去download   ATA-6   Spec  
  去google搜索ATA   Spec应该就找得到Top

2 楼xyyhjk(<我的理想是做一个平凡的人,现在我实现了>)回复于 2005-02-28 16:07:42 得分 0

谢谢楼上的解答  
  能否帮忙看看我下面的代码  
  我指定读第一个硬盘控制器的主盘,就是01F0-01F7端口,用F1命令设定磁盘密码,F1命令要求从01F0端口输出512字节,ATAPI上对01F1,01F2,01F3,01F4,01F5要求是NA,01F6要求是   OBS   NA   OBS   DEV   NA   NA   NA   NA  
  我的程序片段  
  ;先传输512字节到01F0H  
  MOV     SI,OFFSET   BUFF         ;512字节,DS,CS,ES统一  
  MOV     CX,100H                       ;字传送  
  MOV     DX,01F0H                     ;端口  
  REP     OUTSW  
  ;传其他端口  
  MOV     DX,01F1H  
  XOR     AX,AX  
  OUT     DX,AL  
  INC     DX               ;01F2H  
  OUT     DX,AL  
  INC     DX               ;01F3H  
  OUT     DX,AL  
  INC     DX               ;01F4H  
  OUT     DX,AL  
  INC     DX               ;01F5H  
  OUT     DX,AL  
  INC     DX  
  MOV     AL,10100000B       ;DEV   为第一硬盘0  
  OUT     DX,AL  
  INC     DX               ;01F7H  
  MOV     AL,0F1H  
  OUT     DX,AL  
  ;命令发送完成  
  ;现在有2个问题,一个是我向01F0端口发送数据时,01F7端口的BIT3   数据请求准备好的位总为0.就是没有准备好数据接受.如何让01F7的BIT3置为1即已准备好了  
  第二个问题是以上代码可以吗?OUT后的延时已经考虑了.  
  感谢再次解答  
   
  Top

3 楼terry_followwind()回复于 2005-03-14 14:30:52 得分 0

我不知道你要读什么,ATA和ATAPI有些不一样的Top

相关问题

  • 硬盘I/O错误能修好吗?????
  • 串口硬盘问题
  • 读取硬盘序列号
  • 读写硬盘的问题?
  • 读取硬盘信息
  • 请问,DMA33的硬盘实际的I/O速度有多大?
  • 如何通过 I/O 端囗直接写硬盘
  • Windows XP不认识SATA接口硬盘?
  • 怎样读出硬盘序号
  • Q:IDE硬盘的读写测试

关键词

  • 硬盘
  • 端口
  • 数据
  • 信息
  • word
  • dx
  • aljmp
  • alinc
  • hout
  • hmov

得分解答快速导航

  • 帖主:xyyhjk
  • terry_followwind

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo