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 ответ
Есть несколько причин, по которым загрузчик не работает:
- загрузчик находится не в первом секторе USB/Floppy/etc.
- загрузчик не ровно 512 байт
- вам не хватает подписи 0xAA55 на последних 2 байтах загрузчика
в вашем примере я предполагаю, что у вас неправильный размер загрузчика (это не 512 байт)
попробуйте заменить
rb 7E00h-2-$
db 055h,0AAh
с
TIMES 510-($-$$) DB 0
DW 0xAA55
это гарантирует, что ваш файл имеет длину 512 байт и имеет необходимую подпись загрузчика