- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DOS下BIOS中断INT13H、IO端口直接编程读取IDE、SATA硬盘的参数和TC语言程序
DOS 下 BIOS 中断 INT13H、IO 端口直接编程读取 IDE、SATA 硬盘的参数和 TC 语言程序
wxleasyland@
2015.4
一、 背景
华硕笔记本电脑 A45VD,640GB SATA 机械硬盘放在硬盘位,120GB SSD SATA 硬盘放在光驱位。BIOS 中设置 SATA 为 AHCI 方式 (不是
IDE 兼容方式)。
在 WIN7 看,SATA 控制器是 Intel 7 Series/C216 Chipset Family SATA AHCI Controller,硬件 ID 是 VEN_8086DEV_1E03CC_010601,
位置在 PCI 总线 0,设备 31,功能 2。
640GB 机械硬盘是在 CHANNEL0 (通道 0,即安装在SATA 控制器接口 PORT0 上)。
120GB SSD硬盘是在通道 2 (即安装在 SATA 控制器接口 PORT2 上)。
SSD 设置成为启动盘。因为BIOS 启动设置是 SSD 硬盘,故在 DOS 下,机械硬盘就排第 2 了,即磁盘号 81H。
以下均是对 640GB 机械硬盘进行分析。
二、 INT 13H 传统中断,AH=08H
(1) 读取驱动器参数
AH=08H
入口:
DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
返回:
CF=1——操作失败,AH=状态代码
CF=0 成功
BL=01H — 360K
=02H — 1.2M
=03H — 720K
=04H — 1.44M
=05H ??
=06H 2.88M
=10H ATAPI 可移动介质
CH=最大柱面号的低8 位 low eight bits of maximum cylinder number (柱面号从 0 开始算)
CL 的位 7-6=最大柱面号的高 2 位 high two bits of maximum cylinder number
CL 的位 5-0=最大扇区号 maximum sector number (扇区号从 1 开始算)
DH=最大磁头号 maximum head number (磁头号从 0 开始算)
DL=驱动器数 number of drives
ES:DI=磁盘驱动器参数表地址 (只软驱)
(2) 注意:
1. 得到的数值是 “编号”、不是 “总个数”!
“总个数”是 number of ...
“编号”是 xxx number
扇区号从 1 开始,故扇区数=最大扇区号
磁头号从 0 开始,故磁头数=最大磁头号+1
2. BIOS 保留最后 1 个柱用于测试目的,这个柱不报告出来,而且柱面号从 0 开始,所以 柱面总个数=最大柱面号+2 !
There is one test cylinder, It is last cylinder on drive, which is always reserved for test purposes, and therefore
not reported by BIOS to be. (这点说明在 /46-asm/16321e22892a8381.htm)
这两点说明看似简单,但是是经过研究很久才知道的 !!!
(3)实测
U 盘软驱启动,98 版 DOS 下 DEBUG,INT13H,AH 08H ,DL=81H 硬盘:
得到 AX=0,BX=0,CH=FE (1022,即 0~1022+1柱号),CL=FF (63,即 1~63 扇号),DH=FE (254,即 0~254 头号),DL=2 (即 2 个硬
盘),ES:DI 没有数据。
即 1024柱×255 头×63 扇,合 8.4G 硬盘,总容量不一致。
可以看出,除柱面个数外,磁头数、扇区数与后面 DISKMAN 一致。
可以将柱面个数单独计算,柱面个数=实际 LB
文档评论(0)