| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3203 人关注过本帖
标题:关于硬盘DMA传送
只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用zjsxwc在2012-6-10 20:57:19的发言:

实模式下 DOS 可以用32位寄存器eax ?
可以进保护模式嘛
2012-06-10 21:06
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
核心的问题就是 进了保护模式 还算DOS么 所以这个问题。。
2012-06-10 21:07
ljg438
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-27
收藏
得分:0 
回复 4楼 zjsxwc
多谢ZJSXWC兄的关心,现在我已经独立解决了。这个问题的关键点在于命令的顺序不能颠倒
如下
.MODEL SMALL
.386
.CODE
START:
CLD
MOV AX,40000H ;PRD DESCRIPTOR
MOV ES,AX
MOV DI,0
MOV EAX,20000H
STOSD
MOV EAX,80000200H
STOSD

MOV DX,0E094H  ;PRD ADDRESS
MOV EAX,40000H
OUT DX,EAX

MOV AL,1 ;STATUS REG
MOV DX,0E092H
OUT DX,AL
INC DX
MOV AL,0
OUT DX,AL
INC DX
OUT DX,AL
INC DX
OUT DX,AL
INC DX
MOV AL,0E0H
OUT DX,AL
INC DX
MOV AL,0C9H ;DMA READ CMD
OUT DX,AL

MOV AL,0
MOV DX,0E090H
OUT DX,AL

MOV DX,0E092H
MOV AL,6
OUT DX,AL

MOV AL,9
MOV DX,0E090H ;READ START
OUT DX,AL

MOV AH,4CH
INT 21H
END START


;该DEMO用于将硬盘MBR扇区读入绝对地址2000:0处,大家可以试是,结尾为55AA
关于各自寄存器的来源遍历PCI总线,唯一确定的OFFSET 0BH,0AH值为01 00(硬盘)
2012-06-13 12:23
ljg438
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-27
收藏
得分:0 
回复 11楼 zklhp
大哥,我无语了,汇编语言即是机器语言,现在还有8086么,都是P4以上了吧,还有什么指令不能执行的??
还32位,都64位了,参看指令前缀66,67H
2012-06-13 12:26
ljg438
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-27
收藏
得分:0 
回复 12楼 zklhp
32寄存器位不用进保护模式,指令前缀66H,67H
2012-06-13 12:27
ljg438
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-27
收藏
得分:0 
实模式甚至能访问4G内存,你们不知道么
2012-06-13 12:31
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
4G内存的帖子我就转来了

我记得我回复了啊
2012-06-13 12:33
ljg438
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-27
收藏
得分:0 
.386p
code segment para use16
assume cs:code
start:
xor eax,eax
mov ebx,eax
mov ax,seg gdt0
she eax,4
mov bx,offset gdt0
add eax,ebx
mov dword ptr cs:[gdtbase],eax

cli
in al,0eeh
lgdt qword ptr cs:[gdtlen]
mov eax,cr0
or al,1
mov cr0,eax
mov bx,8
mov fs,bx
and al,0feh
mov cr0,eax

mov edi,0fffffff0h
mov cx,8
mov ax,2000h
mov ds,ax
mov si,0
l0:
mov ax,fs:[di]
mov ds:[si],ax
add ax,2
add si,2
add di,2
dec cx
cmp cx,0
jnz l0
mov ah,4ch
int 21h
gdtlen dw 0fh
gdtbase dd 0
gdt0 dq 0
gdt1 dq 00cf92000000ffffh
code ends
end start
;access 4g memory in dos,将2000:0与FFFF:0的16各字节比较一下吧,CPU上电的第一条指令
2012-06-13 12:43
ljg438
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-27
收藏
得分:0 
;错了2处,SHL EAX,4   去掉ADD AX,2

.386p
code segment para use16
assume cs:code
start:
xor eax,eax
mov ebx,eax
mov ax,seg gdt0
shl eax,4
mov bx,offset gdt0
add eax,ebx
mov dword ptr cs:[gdtbase],eax

cli
in al,0eeh
lgdt qword ptr cs:[gdtlen]
mov eax,cr0
or al,1
mov cr0,eax
mov bx,8
mov fs,bx
and al,0feh
mov cr0,eax

mov edi,0fffffff0h
mov cx,8
mov ax,2000h
mov ds,ax
mov si,0
l0:
mov ax,fs:[di]
mov ds:[si],ax
add si,2
add di,2
dec cx
cmp cx,0
jnz l0
mov ah,4ch
int 21h
gdtlen dw 0fh
gdtbase dd 0
gdt0 dq 0
gdt1 dq 00cf92000000ffffh
code ends
end start
2012-06-13 12:47
ljg438
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-27
收藏
得分:0 
日,还有一处,MOV AX,FS:[EDI]
2012-06-13 12:51
快速回复:关于硬盘DMA传送
数据加载中...
 
   



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

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