社区
汇编语言
帖子详情
技术讨论,关于IDE设备的读写
Areslee
2002-08-20 03:06:15
我在直接编程访问IDE设备(就是硬盘啦)时发现如果一次只读写一个扇区时很正常,但用多扇区读写时好象在每个扇的数据传送完之后要等待一段时间才能传送下一扇区,请问有没有人知道这是怎么回事?至少应等待多久?
还有,有没有人做过DMA方式的访问?
...全文
127
16
打赏
收藏
技术讨论,关于IDE设备的读写
我在直接编程访问IDE设备(就是硬盘啦)时发现如果一次只读写一个扇区时很正常,但用多扇区读写时好象在每个扇的数据传送完之后要等待一段时间才能传送下一扇区,请问有没有人知道这是怎么回事?至少应等待多久? 还有,有没有人做过DMA方式的访问?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Areslee
2002-10-08
打赏
举报
回复
搞定了,还是Jiessie说得对,要检查状态寄存器的最高位,下面附上最终版的源代码:
读取3FH处的两个扇区:
code segment
assume cs:code
start:
push cs
pop ds
call waitfree
jnz err
mov dx,1f0h
add dx,3
mov al,3fh
out dx,al
call waitfree
jnz err
mov al,0
inc dx
out dx,al
call waitfree
jnz err
inc dx
out dx,al
call waitfree
jnz err
mov al,0e0h
inc dx
out dx,al
call waitfree
jnz err
mov dx,1f2h
mov al,2
out dx,al
call waitfree
jnz err
mov dx,1f7h
mov al,21h
out dx,al
call waitfree
jnz err
mov cx,256
mov dx,1f0h
mov di,offset sector
push cs
pop es
read: in ax,dx
stosw
loop read
err:
add dx,7
in al,dx
mov bx,ax
__wait: call waitfree
jnz __wait
mov cx,256
mov dx,1f0h
read1: in ax,dx
stosw
loop read1
mov ax,4c00h
int 21h
waitfree proc
push cx
push dx
push ax
Mov DX,1f7H
Sub CX,CX
_Wait: In AL,DX
and al,0d0h
Cmp AL,50H
Jz Ok
Loop _Wait
ok: pop ax
pop dx
pop cx
ret
waitfree endp
align 16
sector dw 512 dup(0)
code ends
end start
Areslee
2002-10-07
打赏
举报
回复
read: in ax,dx
xchg al,ah
stosw
loop read
应该改为:
read: in ax,dx
stosw
loop read
Areslee
2002-10-07
打赏
举报
回复
是的。
会思考的草
2002-10-07
打赏
举报
回复
用IDE寄存器?
Areslee
2002-10-07
打赏
举报
回复
直接IO读硬盘的例子:
读主引导扇区
code segment
assume cs:code
start:
call waitfree
jnz err
mov dx,1f0h
add dx,3
mov al,0
out dx,al
inc dx
out dx,al
inc dx
out dx,al
mov al,0e0h
inc dx
out dx,al
mov dx,1f2h
mov al,1
out dx,al
mov dx,1f7h
mov al,21h
out dx,al
call waitfree
jnz err
mov cx,256
mov dx,1f0h
mov di,offset sector
push cs
pop es
read: in ax,dx
xchg al,ah
stosw
loop read
err:
mov ax,4c00h
int 21h
waitfree proc
push cx
push dx
push ax
Mov DX,1f7H
Sub CX,CX
_Wait: In AL,DX
and al,50h
Cmp AL,50H
Jz Ok
Loop _Wait
ok: pop ax
pop dx
pop cx
ret
waitfree endp
sector dw 256 dup(0)
code ends
end start
Areslee
2002-09-14
打赏
举报
回复
clares.myrice.com/links.htm
zky
2002-09-13
打赏
举报
回复
谁有相关资料,那有下载?
firewings
2002-09-04
打赏
举报
回复
To Areslee(易水):
sorry!我现在对直接端口操作还不是很熟悉。怎样才能够通过in 和out这两个命令向ide设备发送命令呢?所有ide设备的端口都相同吗?具体发送命令的格式是怎样的呢?能不能给一段简单的例子,说明一下?
firewings
2002-08-31
打赏
举报
回复
to Areslee (易水) :
你做的那个直接读的程序能不能也email给我一份?让我也学习学习!我现在有个程序是用int 13h扩展读写硬盘。另外我想试试用直接IO读写cdrw!
先谢谢了!
Areslee
2002-08-31
打赏
举报
回复
那么有人做过DMA传输的吗?
to firewings():
你照着IDE命令集写就行了
Jiessie
2002-08-30
打赏
举报
回复
非常报歉,你前几次问我的问题我都有知道,我想,只能在我离开这公司的时候才能说!
IDE中,每读一个扇区都必须检查 status register.. 直到not BSY和D??东东,记不清了!也就是ATA/ATAPI中所讲的!
dszsun
2002-08-21
打赏
举报
回复
哦,我的程序就是在windows的,看来我用不了那办法哦:(
Areslee
2002-08-21
打赏
举报
回复
我只是做的一个测试程序,你按照IDE规范上去写就行,很简单的。
不知你的程序运行在什么平台下,WINDOWS下是不能这样做的
dszsun
2002-08-21
打赏
举报
回复
哦,做驱动可以?我现在做的就是一个vxd呀。已经在网友 neocosmic(不顾一切) 的指导下用IOS_SendCommand的办法实现了对扇区的读写。
Areslee
2002-08-21
打赏
举报
回复
做区动啊
dszsun
2002-08-20
打赏
举报
回复
关注ing......,
另外,我正在做一个硬盘加密出现,但我用的不是DMA方式,那我还不会,我正在用其它的扇区读写办法。如果我能想你那样直接访问IDE就好呀!你能把你的程序email个我学习吗?谢谢!
dszsun@sina.com
计算机组成原理平均等待时间,系统分析师-计算机组成原理与系统结构
一、计算机的组成控制器、运算器、存储器、输入
设备
和输出
设备
二、高速缓冲存储器1、多级存储器体系存储体系:寄存器、Cache(最快)、磁盘存储器、光盘存储器、磁带存储器存储器存取方式:顺序存取(磁带)、直接存取(磁盘),随机存取(内存)、相联存取(cache)性能指标:存取时间、存取带宽、存取周期和数据传输率2、Cache的概念功能:提高CPU的数据输入输出速率。使用Cache改善性能的依据是程序的...
测试磁盘
读写
速度
有时候我们在做维护的时候,总会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的
读写
速度,来进行下一步的决策. 下面是两种测试方法: (1)使用hdparm命令 这是一个是用来获取ATA/
IDE
硬盘的参数的命令,是由早期Linux
IDE
驱动的开发和维护人员 Mark Lord开发编写的( hdparm has been written
SD card + Arduino
IDE
如何提高SD card的
读写
速度
目前来说达到的速度不是很让我满意,虽然够用,但是应该还有不小的提升空间,在后续会继续探索。如果你有任何疑问欢迎到评论区留言,我会尽力回复。如果对我所介绍的内容有任何改进的建议也欢迎告诉我!
FPGA基于spi的flash
读写
FPGA基于spi的flash
读写
初识
设备
控制器
前面我们了解到,cpu通过
读写
io地址来读取磁盘扇区里的数据,我们又了解到cpu与磁盘之间可能隔着前端总线,北桥芯片,南北桥之间的pci连接,以及南桥上磁盘控制器,最后才能到达磁盘驱动器控制磁头
读写
磁盘数据。现在我们将这几个场景连接起来,看看更具体一点的交互过程。 首先,我们打开windows系统里的
设备
管理器,找到磁盘控制器和磁盘驱动器两个
设备
。这两个
设备
的名字容易引起混淆。我们看这两个设
汇编语言
21,500
社区成员
41,619
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章