FASM - загрузочный сектор на USB не работает

Во -первых, извините за мой плохой английский, я француз. На данный момент я изучаю asm с помощью fasm для тестирования программирования загрузочного сектора.

Я сделал простую загрузочную программу, скомпилировал ее и записал boot.bin в первый сектор моего usb.

Но когда я загружаюсь на моем компьютере или в virtualbox, диск не найден....

Код загрузочного сектора:

;=======================================================================
;   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 ответ

Есть несколько причин, по которым загрузчик не работает:

  1. загрузчик находится не в первом секторе USB/Floppy/etc.
  2. загрузчик не ровно 512 байт
  3. вам не хватает подписи 0xAA55 на последних 2 байтах загрузчика

в вашем примере я предполагаю, что у вас неправильный размер загрузчика (это не 512 байт)

попробуйте заменить

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

с

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

это гарантирует, что ваш файл имеет длину 512 байт и имеет необходимую подпись загрузчика

Другие вопросы по тегам