社区
汇编语言
帖子详情
技术讨论,关于IDE设备的读写
Areslee
2002-08-20 03:06:15
我在直接编程访问IDE设备(就是硬盘啦)时发现如果一次只读写一个扇区时很正常,但用多扇区读写时好象在每个扇的数据传送完之后要等待一段时间才能传送下一扇区,请问有没有人知道这是怎么回事?至少应等待多久?
还有,有没有人做过DMA方式的访问?
...全文
73
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
C-
IDE
简易教程
C-
IDE
是由CSDN提供的云端在线集成开发环境,允许用户在云端创建开发环境,打开浏览器即可使用,随时随地专心写代码。 C-
IDE
前端基于浏览器的编辑器,功能强大,而后端是基于docker的ubuntu操作系统,您可以使用liunx...
SCSI RAID与
IDE
RAID性能对比说明
有一点我们不可否认,在当今的
技术
中,
IDE
RAID阵列对许多商业应用并不是最佳的解决方案,但是它的价格却要比远远低于SCSI。 SCSI RAID在性能上有绝对突出的优势,当然售价也高。因此到底使用那种磁盘阵列
技术
,...
Linux内核之
设备
驱动
设备
驱动 操作系统的目的之一就是将系统硬件
设备
细节从用户视线中隐藏起来。例如虚拟文件系统对...键盘、鼠标和串行口由一个高级I/O芯片统一管理,
IDE
控制器控制
IDE
硬盘而SCSI控制器控制SCSI硬盘等等。每个硬件
【计算机原理与接口
技术
(UNIX)⑬】——总线概述【总线与总线标准、总线结构、ISA、PCI、
IDE
】
关键词:微型计算机原理、总线、总线标准、总线结构、ISA总线、PCI总线、USB总线、并行 I/O 标准接口
IDE
IDE
,SATA,SCSI,SAS,FC,SSD说明与区别
IDE
代表着硬盘的一种类型,但在实际的应用中,人们也习惯用
IDE
来称呼最早出现
IDE
类型硬盘ATA-1,这种类型的接口随着接口
技术
的发展已经被淘汰了,而其后发展分支出更多类型的硬盘接口,比如ATA、Ultra ATA、DMA、...
汇编语言
21,459
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章