阅读:1185回复:3
怎样用I/O去读写连续的扇区?
请各位大侠帮我看一下我的代码,错在哪里了?我已获取ring0
我想把数据写入到1,2扇区。但不行,不知道错在哪儿了? mov dx,1f6h ; 要读入的磁盘号及磁头号 mov al,0a0h ; 磁盘0,磁头0 out dx,al mov dx,1f2h ; 要写的扇区数量 ;************************************************* mov al,2 ; 写两个扇区 (写两扇区是mov al,2吗?) ;************************************************* out dx,al mov dx,1f3h ;要写的扇区号 mov al,1 ;写到1扇区 out dx,al mov dx,1f4h ; 要写的柱面的低8位 mov al,0 ; 低8位为0 out dx,al mov dx,1f5h ; 要写的柱面的高2位 mov al,0 ; 高2位为0 out dx,al mov dx,1f7h ;命令端口 mov al,30h ;尝试着写扇区. out dx,al oogle: in al,dx test al,8 ;磁盘扇区缓冲是否准备好 jz oogle mov cx,512 ;设置循环次数(512/2) mov si,buffer mov dx,1f0h ;数据端口,用来存放要发送的数据. rep outsw ;发送数据. 如果单独写第1或第2扇区,程序都可以正确执行。但连续写2扇区,程序却不执行,我怀疑是1f2h端口的的含义让我搞错了。但我手头也没资料可以查。(也不知道怎么查,呵呵)假设buffer长度为1024。 程序其它代码不变。(当然如果是写一扇区,cx为512/2,呵呵) 有哪位大侠知道ATA手册可以下载或阅读的,麻烦发个链接。谢谢了。 祝大伙新春愉快! ![]() |
|
沙发#
发布于:2007-02-25 06:53
我在win2000下试了一下却可以,奇怪!
为什么XP2就不行呢? 老遇见奇怪的问题,前几天碰到80G硬盘的问题还没想通,现在又来了这么个奇怪的问题。 |
|
板凳#
发布于:2007-02-27 09:50
|
|
地板#
发布于:2007-03-01 02:03
谢谢hb_longbow的提醒,我找到答案了.再次感谢!
|
|