| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3205 人关注过本帖
标题:关于硬盘DMA传送
只看楼主 加入收藏
ljg438
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-27
结帖率:100%
收藏
 问题点数:0 回复次数:24 
关于硬盘DMA传送
;本人硬盘的总线号 0,设备号31,FUNTION 2(SLAVE),主设备为0,31,5但不能作为DMA主控设备(PCI CMD REG=3,BIT2不能置位)
;硬盘DMA基地址REG=0E091H(OFFSET 20H),即CONTROL REG=0E090H,STATUS REG=0E092H,PRD REG=0E094H
;base address reg=0e0d0h
;本人的问题在于:为什么按照INTEL 82801AA(ICH0)的资料无法用DMA读去硬盘缓冲区?本论坛藏龙卧虎,请进到此贴的大牛一定留下个一言半语点化下小弟,不胜感激!!!
;程序如下:
.model small
.386
.code
start:
cli
mov al,0ffh
out 0a1h,al

mov dx,0e090h
mov al,0
out dx,al

mov dx,0e092h
mov al,6
out dx,al

mov ax,4000h
mov es,ax
mov di,0
mov eax,40000h
mov dx,0e094h
out dx,eax
mov eax,20000h
stosd
mov eax,80000200h
stosd

mov eax,0
call readsector

mov al,1
mov dx,0e090h
out dx,al

mov dx,0e092h
l1:
in al,dx
test al,4
jz l1
mov al,6
out dx,al

mov ah,4ch
int 21h

readsector proc near
push eax
push dx
mov dx,0e0d3h
out dx,al
inc dx
shr eax,8
out dx,al
inc dx
shr eax,8
out dx,al
inc dx
shr eax,8
add al,0e0h
out dx,al

mov dx,0e0d2h
mov al,1
out dx,al
mov dx,0e0d7h
mov al,20h
out dx,al
l0:
in al,dx
cmp al,58h
jnz l0
pop dx
pop eax
retn
end start



搜索更多相关主题的帖子: address 藏龙卧虎 不胜感激 硬盘 
2012-06-02 14:08
bingghost
Rank: 2
等 级:论坛游民
帖 子:70
专家分:85
注 册:2012-1-4
收藏
得分:0 
膜拜啊   膜拜啊   

我的头像就是我的女神 可惜我的女神已经死了 所以我的心也死了
2012-06-04 00:49
ljg438
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-27
收藏
得分:0 
大哥有话直说,膜拜什么??
2012-06-04 12:55
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
收藏
得分:0 
首先如果你是在没有操作系统或者dos下的时候这是可以搞定的.
然后如果是在linux,Windows这些现代操作系统下,你不能直接用汇编操作io,,万幸现代操作系统都给出了相应的io操作接口(所谓的驱动drivers),我们可以方便地调用这些接口来操作io,而不必担心错误的操作导致硬件损坏。

对于Windows下操作dma可以参考microsoft提供的此文  http://download.

对于linux下操作dma可以参考 Jonathan Corbet的   http://

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2012-06-05 19:44
ljg438
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-27
收藏
得分:0 
大哥,这点我还不知道么,当然是在DOS下了,我的目标人群是主板开发人员,但遗憾的是这些底层武工高手一般没时间上论坛这类网站,很难在这里碰到
2012-06-07 19:58
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用ljg438在2012-6-7 19:58:33的发言:

大哥,这点我还不知道么,当然是在DOS下了,我的目标人群是主板开发人员,但遗憾的是这些底层武工高手一般没时间上论坛这类网站,很难在这里碰到

没法啊 这就几个学生 大牛没有 像我都不是搞计算机的 呵呵
2012-06-07 20:01
ljg438
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-27
收藏
得分:0 
我连个学生都不是啊,我是农民工啊,我自学的,(别歧视我)  :)
2012-06-07 20:07
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
收藏
得分:0 
回复 5楼 ljg438
擦,不要黑我大DOS ,我大DOS 可以像你这样直接 用eax这个寄存器?

[ 本帖最后由 zjsxwc 于 2012-6-10 21:31 编辑 ]

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2012-06-10 19:54
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用zjsxwc在2012-6-10 19:54:44的发言:

擦,不要黑我大DOS ,我大DOS 可以用eax这个寄存器?

理论上可以。。
2012-06-10 20:49
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
收藏
得分:0 
回复 9楼 zklhp
实模式下 DOS 可以用32位寄存器eax ?

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2012-06-10 20:57
快速回复:关于硬盘DMA传送
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017187 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved