使用 Int 13H 读取磁盘参数

Posted

技术标签:

【中文标题】使用 Int 13H 读取磁盘参数【英文标题】:Using Int 13H to Read disk parameters 【发布时间】:2013-02-01 17:40:24 【问题描述】:

简单地说,我的目标是使用 Int 13h 读取我的磁盘参数。

我知道这不能在 Windows 中直接完成,因为它本质上会拦截 Bios 调用。

到目前为止,我的想法是我可以重写内存位置 0x7C00h 中的代码,并利用 Int 19h 进行热重启,这将跳转到现在被覆盖的 0:7C00h,然后我就可以读取磁盘参数。

我在正确的轨道上吗?我觉得(我希望)我至少指向了正确的方向。

提前致谢。

【问题讨论】:

如果您在 Windows 上,为什么要使用 int 0x13?只需向 ATA 设备发出 ATA_IDENTIFY 即可获得更好的信息。 这是指定我编写实模式程序并使用 int 13h 的作业的一部分,这就是为什么我要问我是否在正确的轨道上,而不是代码。我对此很陌生,所以我不是 100% 采用最佳方法,没有指定 Windows,我只是认为这可能是一个合理的方向。 您必须在 Windows 内部进行吗? 问题格式对此含糊不清,现在教授只是说在VirtualBox中使用MSDOS。谢谢大家的时间! 【参考方案1】:

热重启没有多大意义。

如果您的程序在 Windows 下运行,您将无法启动热重启,并且地址 0x7c00 不太可能映射到物理地址 0x7c00 的物理内存,这要归功于 Windows。

如果您的程序在 DOS 下运行,为什么不直接使用 int 13h 而无需重新启动?

如果你真的想在干净的系统(没有 DOS 或 Windows)上运行你的代码,写一个引导扇区,制作一张可引导的软盘或 CD 或闪存棒,然后从它引导。

【讨论】:

以上是关于使用 Int 13H 读取磁盘参数的主要内容,如果未能解决你的问题,请参考以下文章

在引导加载程序中使用 int 13h ah=42h 读取 LBA 硬盘

BIOS int 13h 无法读取第一条轨道

BIOS INT 13H 问题(从驱动器读取扇区)

BIOS int 13H,AH=02(读取软盘)和堆栈段

[汇编]《汇编语言》第17章 使用BIOS进行键盘输入和磁盘读写

USB 硬盘仿真导致磁盘读取失败(BIOS int 13)?