硬盘读写的基本单位是扇区。
从硬盘读取数据的模式
- CHS 模式,向硬盘控制器分别发送磁头号、柱面号和扇区号(扇区在某个柱面上的编号)。
- LBA 模式,对所有扇区同一编址,称为逻辑扇区,提供逻辑扇区号访问。
- LBA28,使用 28 个 bit 表示逻辑扇区号,每个扇区 512 B,总共可管理 128 GB 的硬盘。
- LBA48,46 个 bit 表示逻辑扇区号,可管理 131072 TB 的硬盘容量。
LBA28 访问硬盘
主硬盘控制器具有 8 个端口,端口号从0x01f0
到0x01f7
。
-
设置要读取的扇区数量
- 端口号:
0x01f2
,表示读取的扇区数
- 端口号:
-
设置起始 LBA 扇区号
- 逻辑扇区编址方法 LBA28,用28位表示逻辑扇区号
- 端口号:
0x01f3
,表示起始 LBA 扇区号 7~0 位 - 端口号:
0x01f4
,表示起始 LBA 扇区号 15~8 位 - 端口号:
0x01f5
,表示起始 LBA 扇区号 23~16 位 - 端口号:
0x01f6
,- 低 4 位表示起始 LBA 扇区号的 27~24 位
- 第 4 位指示硬盘号,0表示主盘,1表示从盘
- 高 3 位是“111”;第 6 位为 1:表示 LBA 模式,为 0:表示 CHS 模式
-
设置命令
- 端口号:
0x01f7
,既是命令端口,又是状态端口- 当端口值为
0x20
时,表示读
- 当端口值为
- 端口号:
-
等待读写操作完成
- 端口号:
0x01f7
,硬盘读写期间此端口表示硬盘状态- 第 0 位,1表示前一个命令执行错误,具体原因见端口号:
0x01f1
- 第 3 位,1表示硬盘已准备好交换数据
- 第 7 位,1表示硬盘忙
- 第 0 位,1表示前一个命令执行错误,具体原因见端口号:
- 端口号:
-
连续取出数据
- 端口号:
0x01f0
,数据端口,这是一个 16 bit 端口。
- 端口号:
-
错误信息
- 端口号:
0x01f1
,包含硬盘驱动器最后一次执行命令后的状态,错误原因。
- 端口号:
参考
- 《x86汇编语言:从实模式到保护模式》 —— 李忠
网友评论