x86 汇编如何控制硬盘?


查看系列文章点这里: 操作系统真象还原

前言

  CPU 要想控制硬盘,就必须要通过硬盘控制器,本文只介绍最基础的使用,以满足《操作系统真象还原》一书中的需要,更详细的内容请参考ATA手册。


一、什么是硬盘控制器?

  CPU 要控制的硬件非常多,不可能为每个硬件都设计专门的电路,所以需要一个通用的方法来操作硬盘,因此,硬盘控制器就诞生了。它作为CPU与硬盘间中转站,不仅有帮助CPU控制硬盘的作用,还有缓存的作用,用来解决CPU和硬盘速度不一致的问题。

  硬盘控制器属于I/O接口,因此我们需要通过读写硬盘控制器的端口,以此来操作硬盘控制器,完成我们的读写需求。

二、硬盘控制器的部分端口寄存器

  端口可以分为两组,Command Block registers 和 Control Block registers ,前者用于想硬盘驱动器写入命令字或者从硬盘控制器获得硬盘状态,后者用于控制硬盘工作状态。

IO端口 端口用途
Primary通道 Secondary通道 读操作时 写操作时
Command Block registers
0x1F00x170Data
0x1F10x171ErrorFeatures
0x1F20x172Sector Count
0x1F30x173LBA Low
0x1F40x174LBA Mid
0x1F50x175LBA High
0x1F60x176Device
0x1F70x177StatusCommand
Control Block registers
0x3F60x376Alternate Status Device Control

  下面依次解释一下每个寄存器的含义:

  • Data:读或写时,存放数据;

  • Error:读取硬盘失败时,记录错误信息;

  • Features:当写硬盘时,存储命令需要的特殊参数;

  • Sector Count:待读或写的扇区数;

  • LBA Low:LBA 0~7位;

  • LBA Mid:LBA 8~15位;

  • LBA High:LBA 16~23位;

  • Device:低4位存储LBA 24~27位,第4位用来指定通道上的主盘(0)或从盘(1),第6位用来设置是否启用 LBA 方式(1代表LBA,0代表CHS),其它两位固定为1;

  • Status:给出硬盘状态信息,具体如下表所示:

    位置01 ~ 234 ~567
    名称ERRDRQDRDYBSY
    含义为1表示有错误发生为1表示数据以及准备好,随时可以输出为1表示设备准备就绪,等待指令为1表示硬盘正忙,勿扰
  • Command:存储让硬盘执行的命令,只有把命令写入该寄存器,硬盘就开始工作了,主要使用三个命令:

    • 0xEC:硬盘识别
    • 0x20:读扇区
    • 0x30:写扇区

三、常用的硬盘操作方法

  不同硬盘的操作方法会有所不同,具体还是要参考ATA手册,不过总的来说可以概括为以下步骤:

  1. 选择通道,并往Sector Count寄存器写入待读或写的扇区数;
  2. 往该通道的LBA寄存器写入起始扇区低24位地址;
  3. 设置Device寄存器;
  4. 往该通道的Command寄存器写入命令;
  5. 读取该通道的status寄存器,判断工作是否完成;
  6. 若是读硬盘,则将数据读到内存中,否则结束;

  硬盘工作完成后,数据以及准备好了,如何获取呢,一般有五种方法:

  • 无条件传送方式: 适用与数据不用准备,随取随用;
  • 查询传送方式: CPU 去检查数据准备好没有;
  • 中断查询方式: 数据好了通知 CPU,CPU来传送数据;
  • 直接存储器存取方式(DMA): 数据好了通知 CPU,CPU 通知 DMA传送数据;
  • I/O处理机传送方式: 不经过 CPU,直接传输;

  持续更新中~~

  • 36
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
《x86汇编语言:从实模式到保护模式》主要讲述INTEL x86处理器的16位实模式、32位保护模式,至于虚拟8086模式,则是为了兼容传统的8086程序,现在看来已经完全过时,不再进行讲述。《x86汇编语言:从实模式到保护模式》的特色之一是提供了大量典型的源代码,这些代码以及相配套的工具程序可以到书中指定的网站,或者电子工业出版社华信教育资源网搜索下载。 每一种处理器都有它自己的机器指令集,而汇编语言的发明则是为了方便这些机器指令的记忆和书写。尽管汇编语言已经较少用于大型软件程序的开发,但从学习者的角度来看,要想真正理解计算机的工作原理,掌握它内部的运行机制,学习汇编语言是必不可少的。本书采用开源的NASM汇编语言编译器和VirtualBox虚拟机软件,以个人计算机广泛采用的Intel处理器为基础,详细讲解了Intel处理器的指令系统和工作模式,以大量的代码演示了16/32/64位软件的开发方法,介绍了处理器的16位实模式和32位保护模式,以及基本的指令系统。这是一本有趣的书,它没有把篇幅花在计算一些枯燥的数学题上。相反,它教你如何直接控制硬件,在不借助于BIOS、DOS、Windows、Linux或者任何其他软件支持的情况下来显示字符、读取硬盘数据、控制其他硬件等。本书可作为大专院校相关专业学生和计算机编程爱好者的教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值