如果我想让引导程序从USB记忆棒引导,则必须包括BPB。 USB记忆棒正在软盘仿真模式下运行。如here所示,有许多不同的BPB版本。 BIOS如何知道存在哪种类型的BPB? GRUB 0.97似乎正在使用另一种BPB格式?

我可以从偏移量0xb稍微填充我的引导程序,然后它也将起作用。
是否有标准尺寸/通用尺寸?我没有在USB上使用任何文件系统,只是原始文件。

我想我需要BPB,因为BIOS试图更新一些值,这会覆盖一些代码。由于每个BPB似乎都有些不同,因此BIOS如何知道在哪里更新什么值?

最佳答案

如果您有BPB,并非所有BIOS实施都在意。 BPB以MBR引导扇区开头的一般格式如下:

bits 16
org 0                   ; BIOS will load the MBR to this location.

    bootStart:
            jmp     _start
            nop
            osType      db  'MSDOS6.0'
            bpb
            bps         dw  512
            spc         db  8
            rs          dw  1
            fats        db  2
            re          dw  512
            ss          dw  0
            media       db  0xf8
            spfat       dw  0xc900
            spt         dw  0x3f00
            heads       dw  0x1000
            hidden      dw  0x3f00, 0
            ls          dw  0x5142,0x0600
            pdn         db  0x80
            cheads          db  0
            sig         db  0x29
            serialno    dw  0xce13, 0x4630
            label       db  'NO NAME'
            fattype     db  "FAT32"

    _start:
                                ; set up the registers
            mov     ax, 0x07c0
            mov     ds, ax
            mov     fs, ax
            mov     gs, ax
            mov     ax, 0x0700
            mov     es, ax


这些字段始终位于同一位置。.如果系统关心BPB,则只需对其进行解析即可对其进行验证。

08-17 05:30