6

我最近一直在研究一些用于软盘驱动器的引导代码。我的目标是修改程序,以便它使用我的 USB 闪存驱动器。现在我看到了 INT 13H 函数是如何与软盘设备一起使用的,但我想我的问题是,与 USB 驱动器的通信会有什么不同?

例如,这里是一段软盘代码(GNU 汇编器):

    movb    $0x00,%dl       /* select 1st floppy */

    /* later */

    movw    sec,%cx     /* get sector number */
    movw    head,%dx    /* get head number */

    movw    $0x0201,%ax /* read 1 sector */
    int $0x13

现在我已经读到将 0x80 移动到 %dl 将选择 BIOS 中的第一个 HDD。在我的特定 BIOS 中,我可以更改驱动器顺序,其中包括 USB 驱动器。我很确定这将变得依赖于 BIOS,但我认为 BIOS 中列出的顺序可能对应于我移入 %dl 的值。我需要追踪一些文档...

我真的不熟悉使用块设备,有人可以指出我一个开始学习更多的好地方吗?

谢谢!

4

3 回答 3

5

简单的答案是,如果 BIOS 可以从 USB 闪存驱动器启动,则可以使用相同的 BIOS 功能来访问软盘/硬盘驱动器。

令人高兴的答案是,一种简单的技术允许相同的引导扇区代码访问 USB 闪存驱动器上的软盘映像,无论它是使用软盘仿真还是硬盘驱动器仿真启动的。如果 dl=80h(硬盘仿真)

GET DRIVE PARAMETERS
int 13h, ah=8
返回:
ch=最大扇区数(与每个磁道的扇区数相同)
dh=最大磁头数(只需加 1 即可得到磁头数)

返回的信息描述了模拟设备的几何结构(如果 dl=0,那么它是标准的软盘几何结构 - 每个磁道 18 个扇区和 2 个磁头)。这可用于计算以下所需的气缸盖扇区信息:

读取扇区(S)
int 13h,ah=2

写扇区(S)
int 13h,ah=3

请参阅Ralf Brown 的中断列表 - int 13h

在这里查看我的帖子:USB 启动秘密

于 2010-08-25T01:08:58.910 回答
3

如果 BIOS 将 USB 设备“视为”硬盘驱动器,它将为其分配一个编号。第一个硬盘驱动器的分配编号从 0x80 开始,第二个硬盘驱动器从 0x81 开始,依此类推。因此,根据安装的硬盘数量,您的 USB 驱动器将位于 0x81 或更大。此外,如果您在 BIOS 中更改顺序,USB 驱动器编号将更改以反映这一点。

于 2010-11-22T17:27:51.690 回答
0

The flash drive is only available if the BIOS supports it. And if it does, it would probably let you boot from it already. Most of this is done by emulation, so the calls to boot the flash drive are probably the same.

I've dumped out the boot blocks from my thumb drives, and have found both floppy and hard drive formats.

Maybe you should just try a bunch of numbers for accessing the drives and see which ones answer.

I think Google is your friend here. Start with "INT 13H". And ask more questions.

于 2009-02-14T06:17:53.563 回答