之前写的一篇文章里设计到DOS下读写硬盘信心,之后经过仔细验证发现,IDE的访问方式和AHCI的访问方式完全不一样,因而前文提到的兼容IDE与AHCI是不对的。我之前之所以认为二者可以做到兼容,是因为AHCI技术刚出来的时候,IDE模式下的硬盘兼容了AHCI模式,也就是用IDE的方式来模拟AHCI的功能,因而那时候的AHCI其本质仍然是IDE,所以可以通过访问IDE硬盘的方式来访问AHCI模式下的硬盘,所以我那台很老的笔记本选择AHCI模式的时候我依然可以用IDE的方式来访问。后来的AHCI模式则脱离了IDE模式,但是AHCI模式可以兼容IDE模式,所以在新机器上验证我的工具时,就访问不了AHCI模式的硬盘。
AHCI与IDE的主要区别是,IDE模式的硬盘可以往IO端口下命令来访问,而AHCI模式下的硬盘则不能使用单个的命令来访问,它使用的是数据包的方式。
当然二者都依然可以使用扩展int 13h来访问硬盘,不过这只能获取部分硬盘参数,而不能获取全部的硬盘信息,至于扩展int 13h具备哪些功能,你可以Google一下,此处不再浪费笔墨。
有一点要注意,使用中断的时候,会牵涉你所使用的编译器。不同的编译器对于中断的处理是不一样的,当然这不仅仅是指编译器的API。因为对于某些中断而言,在保护模式下是不能使用的,它们只能在实模式下能使用,比如int 13H。
DOS本身是