硬盘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读出的信息不对,问题在哪?
谢谢
...全文
95 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
terry_followwind 2005-03-14
  • 打赏
  • 举报
回复
我不知道你要读什么,ATA和ATAPI有些不一样的
xyyhjk 2005-02-28
  • 打赏
  • 举报
回复
谢谢楼上的解答
能否帮忙看看我下面的代码
我指定读第一个硬盘控制器的主盘,就是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后的延时已经考虑了.
感谢再次解答

terry_followwind 2005-02-28
  • 打赏
  • 举报
回复
首先你要去选读哪一个硬盘,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应该就找得到

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧