bios如何知道BPB的类型是什么?

时间:2017-02-09 16:16:37

标签: assembly x86 bootloader

如果我希望我的引导加载程序从usb棒启动,我必须包含一个BPB。 usb棒在软盘模拟模式下运行。如here所示,有许多不同的BPB版本。 bios如何知道BPB的类型? GRUB 0.97似乎正在使用另一种BPB格式?

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

我想我需要BPB,因为bios尝试更新一些值,这会覆盖一些代码。由于每个BPB看起来都有点不同,bios如何知道在哪里更新什么值?

1 个答案:

答案 0 :(得分:2)

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

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,只需解析就可以验证它。