FASM - USB上的引导扇区不起作用

时间:2016-11-13 15:40:08

标签: usb boot fasm sector

首先,抱歉我的英语不好,我是法国人。 目前,我学习asm with fasm来测试引导扇区编程。

我已经制作了一个简单的启动程序,我已经编译了它,并且在我的usb的第一个扇区写了boot.bin。

但是当我在我的电脑或虚拟机中启动时,驱动器还没有找到......

引导部门代码:

;=======================================================================
;   a simpliest 1.44 bootable image by shoorick ;)
;=======================================================================
_bs equ 512
_st equ 18
_hd equ 2
_tr equ 80
;=======================================================================
    org 7C00h
    jmp start
    nop
;=====================================================
    db  "HE-HE OS";     ; 8
    dw  _bs             ; b/s
    db  1               ; s/c  
    dw  1               ; rs
    db  2               ; fats
    dw  224             ; rde
    dw  2880            ; as 
    db  0F0h            ; media
    dw  9               ; s/fat
    dw  _st             ; s/t
    dw  _hd             ; h
    dd  0               ; hs
    dd  0               ; --
    db  0               ; drv
    db  0               ; --
    db  29h             ; ebr
    dd  0               ; sn
    db  "NO NAME    ";  ; 11
    db  "FAT12   ";     ; 8
;=====================================================
start:
    mov   ax,cs
    mov   ds,ax
    mov   cx,count
    mov   si,hello
    mov   bx,7
    mov   ah,0Eh
@@:
    lodsb
    int   10h
    loop  @B
    xor   ah,ah
    int   16h
    int   19h

hello   db "Hi! This is disk-invalid!"
count = $ - hello  

;=======================================================================
    rb 7E00h-2-$
    db 055h,0AAh
;=======================================================================

此代码由fasm的网站提供。

1 个答案:

答案 0 :(得分:0)

引导加载程序无法工作的原因有两个:

  1. 引导加载程序不在USB / Floppy / etc的第一个扇区中。
  2. 引导加载程序不是完全 512字节长
  3. 您在引导程序的最后2个字节中缺少0xAA55签名
  4. 在您的示例中,我假设您的引导加载程序大小错误(不是512字节)

    尝试替换

    rb 7E00h-2-$
    db 055h,0AAh
    

    TIMES 510-($-$$) DB 0
    DW 0xAA55     
    

    这可以确保您的文件正好是512字节长,并且具有所需的引导加载程序签名