CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
(图)邪恶的韩国UMPC 使用 Java 编写数据库应用新规范
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

如何用DMA读写扇区?这个程序有什么错误?

楼主codesphere(codesphere)2005-11-29 21:15:17 在 其他开发语言 / 汇编语言 提问

INCLUDE   Irvine16.inc  
  .data  
  sector   db   512   dup(0)  
  msg1   db   'Starting   DMA   transfer...',0dh,0ah,0  
  msg2   db   'DMA   transfer   end',0dh,0ah,0  
  errmsg   db   'error!',0dh,0ah,0  
  .code  
  InitDMA   proc  
  pusha  
          cli  
                  mov   al,05  
                  out   0ah,al         ;屏蔽通道1  
                  mov   al,0  
  out   0ch,al         ;清先后触发器  
   
                  xor   eax,eax  
                  xor   ebx,ebx  
                  mov   ebx,seg   sector  
                  lea   eax,sector  
                  shl   ebx,4  
                  add   eax,ebx  
                  out   02,al  
                  shr   eax,8  
                  out   02,al  
                  shr   eax,8  
                  out   83h,al  
                   
                  mov   al,0ffh       ;写字节计数器     512字节  
                  out   03h,al  
                  mov   al,1  
                  out   03h,al  
                  mov   al,01000101b   ;写工作方式寄存器   通道1,写传送,单字节传送,地址加1  
  out   0bh,al  
                  mov   al,40h           ;写命令字寄存器,DACK和DREQ低有效  
                  out   08h,al  
                  mov   al,01  
                  out   0ah,al  
  ;初始化DMA完成  
                  sti  
  popa  
  ret  
  InitDMA   endp  
   
  ReadDMA   proc  
  pusha  
  mov   dx,1f7h         ;开始向ATA接口发命令,DMA读  
  xor   cx,cx  
  not   cx  
  CheckReady:  
  in   al,dx  
  and   al,0c0h  
  .if   al==40h         ;IF(BSY=0&DRDY=1)   GO  
  jmp   GetData  
  .endif  
                                  ;lea   dx,msg1  
                                  ;call   WriteString  
                                  loop   CheckReady  
  jmp   Err  
  GetData:                 ;lea   dx,msg1  
                                  ;call   WriteString  
  mov   dx,1f2h  
  mov   al,1  
  out   dx,al  
  mov   dx,1f3h  
  out   dx,al  
  mov   dx,1f4h  
  mov   al,0  
  out   dx,al  
  mov   dx,1f5h  
  out   dx,al  
  mov   dx,1f6h  
  mov   al,0a0h  
  out   dx,al  
  mov   dx,1f7h  
  mov   al,0c8h  
  out   dx,al  
                                  ;lea   dx,msg1  
                                  ;call   WriteString  
  ;CheckRead:  
  ;                 xor   cx,cx  
  ;                 not   cx  
  ;                                 in   al,dx  
  ;                                 and   al,88h  
  ;                                 .if   al==0  
  ;                                                 jmp   DMAEnd  
  ;                                 .endif  
  ;                                 loop   CheckRead  
  ;                                 jmp   Err  
   
  DMAWait:  
                  in   al,08  
                  and   al,02  
                  jz   DMAWait  
  DMAEnd:  
                  mov   al,05  
                  out   0ah,al  
                  jmp   Quit  
  Err:         lea   dx,errmsg  
                  call   WriteString  
  Quit:        
  popa  
  ret  
   
  ReadDMA   endp  
  .STARTUP  
          lea   dx,msg1  
  call   WriteString  
  call   Crlf  
   
          call   InitDMA  
          call   ReadDMA  
          lea   si,sector  
          add   si,510  
          mov   ax,[si]  
          call   WriteHex  
  .EXIT  
  END  
  问题点数:100、回复次数:2Top

1 楼codesphere(codesphere)回复于 2005-11-29 21:53:21 得分 0

是不是初始化好DMA通道后就可以向ATA发命令了,我在程序里初始化了DMA通道1,然后向ATA发READ   DMA命令,这样做对不对?Top

2 楼rockefeller8(洛克菲勒)回复于 2005-12-02 17:08:09 得分 0

太长了,支持一下,查一下DMA通道的初始化。Top

相关问题

  • 急,引导扇区错误,请帮助!!!!
  • 求光盘扇区读取程序
  • 程序错误
  • 程序错误
  • 程序错误
  • fwrite 对硬盘操作导致扇区错误?
  • 如何在WIN32应用程序中读写硬盘的扇区。
  • explorer.exe-应用程序错误
  • 程序保护错误?
  • 程序运行错误

关键词

  • db
  • al
  • almov
  • dx
  • hmov
  • dma
  • hout
  • ah
  • xor
  • lea

得分解答快速导航

  • 帖主:codesphere

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo