注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

编程学习

我的网上家园

 
 
 

日志

 
 

汇编学习练写: 通过端口方式读硬盘扇区  

2013-01-20 15:48:11|  分类: 80x86汇编学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
;说明: 在硬盘LBA1扇区开始的地方存放有字符串: "Hello world. Read Harddisk test." 以ASCII码方式存放
;下面的练习代码,用于读取硬盘的LBA1扇区,并将32个字符显示在屏幕上.
; 0x1f0-0x1f7是IDE硬盘主盘的端口号
; 0x1f2 端口用于设定读写扇区数(硬盘读写以扇区为单位,每扇区512字节)
; 0x1f3-0x1f6 用于设定硬盘的LBA扇区地址,其中0X1F6的高4位取值为 1110B (0XE) 的时候,表示以LBA方式读取磁盘0
; 0x1f7 是命令端口与状态端口
; 0x1f0 是数据端口
                            mov ax,0xb800
                            mov es,ax
                            mov di,0          ;[es:di] 指向显示缓存
                            mov dx,0x1f2  
                            mov al,1
                            out dx,al          ;设定读写扇区数
                            inc dx
                            mov al,1           
                            out dx,al          ;设定读写的LBA扇区地址 (低8位:0~7位)
                            mov al,0
    inc dx
                            out dx,al          ;设定读写的LBA扇区地址(8-16位) 
                            inc dx
                            out dx,al          ;设定读写的LBA扇区地址(17-25位)
                            inc dx
                            mov al,1110_0000B
                            out dx,al          ;设定读写的LBA扇区地址26-28位以及LBA控制参数
                            inc dx
                            mov al,0x20
                            out dx,al          ;读命令
                  waits: in al,dx
                            and al,1000_1000B
                            cmp al,1000B
                            jne waits
                            mov dx,0x1f0
                            mov cx,16     ;32个字符 
                  show: in ax,dx
                            mov [es:di],al
                            inc di
                            mov byte [es:di],10
                            inc di
                            mov [es:di],ah
                            inc di
                            mov byte [es:di],10
                            inc di
                            loop show
      jmp $
                            times 510-($-$$) db 0
                            db 0x55,0xaa      
  评论这张
 
阅读(250)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017