首先,抱歉我的英语不好,我是法国人。目前,我学习asm与fasm来测试引导扇区编程。
我做了一个简单的引导程序,我已经编译了它,我写了boot.bin在我的usb的第一个扇区。
但是当我启动我的PC或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网站的例子提供的
有几个原因导致引导程序不能工作:
- 引导加载程序不在USB/软盘/等的第一个扇区
- 引导加载程序不是确切 512字节长
- 你在引导加载程序的最后2字节缺少0xAA55签名
在你的例子中,我假设你有错误的引导加载程序大小(它不是512字节)
尝试替换
rb 7E00h-2-$
db 055h,0AAh
TIMES 510-($-$$) DB 0
DW 0xAA55
这确保您的文件正好是512字节长,并且它具有所需的引导加载程序签名