assembly – 如何使用BIOS下的USB闪存驱动器执行低级IO(与软盘相比)?

我最近一直在研究一些用于软驱的bootstrap代码.我的目标是修改程序,以便它使用我的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的值相对应.我需要追踪一些文档......

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

谢谢!

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
简单的答案是,如果BIOS可以从USB闪存驱动器启动,则可以使用用于软盘/硬盘驱动器访问的相同BIOS功能.

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

GET DRIVE PARAMETERS
int 13h, ah=8
Return:
ch=maximum sector number (same as number of sectors per track)
dh=maximum head number (just add 1 to get number of heads)

此返回的信息描述了仿真设备的几何形状(如果dl = 0则为标准软盘几何 - 每个磁道18个扇区和2个磁头).这可用于计算所需的气缸盖扇区信息:

READ SECTOR(S)
int 13h, ah=2

WRITE SECTOR(S)
int 13h, ah=3

Ralf Brown's Interrupt List - int 13h

请看我的帖子:USB Booting Secrets

相关文章
相关标签/搜索