自定义引导加载程序问题

Cha*_*den 8 x86 assembly disk utility bootloader

我正在尝试为Hobby OS编写一个引导加载程序并让它运行良好.没什么特别的,只打印一行文字:

BITS 16
ORG 0

start: jmp main


OEM         db "Test OS "           
BytesPerSector:     DW 512
SectorsPerCluster:  DB 1
ReservedSectors:    DW 1
NumberOfFATs:   DB 2
RootEntries:    DW 224
TotalSectors:   DW 2880
Media:      DB 0xf8  
SectorsPerFAT:  DW 9
SectorsPerTrack:    DW 18
HeadsPerCylinder:   DW 2
HiddenSectors:  DD 0
TotalSectorsBig:    DD 0
DriveNumber:        DB 0
Unused:         DB 0
ExtBootSignature:   DB 0x29
SerialNumber:   DD 0xa0a1a2a3
VolumeLabel:    DB "HOBBY  OS  "
FileSystem:         DB "FAT12   "



main:
    ;Adjust code Seg.
    cli
    mov ax, 0x07c0
    mov ds, ax
    mov es, ax
    mov fs, ax
    mov gs, ax
    ;Set up Stack
    mov ax, 0x0000
    mov ss, ax
    mov sp, 0xFFFF
    sti

    mov si, msg
    call print

print:

    .charLoop:

        lodsb
        or al,al
        jz .done
        mov ah, 0x0E
        int 0x10
    .done
        ret

msg db "Hello World",13,10,0
Run Code Online (Sandbox Code Playgroud)

我正在编译

nasm -f bin loader.asm -o loader.bin
dd if=loader.bin of=floppy.img bs=512 count=1 seek=0
Run Code Online (Sandbox Code Playgroud)

我已经读过,前446个字节是引导代码,字节447 - 509是分区表.我试过然后使用:

dd if=loader.bin of=floppy.img bs=446 count=1 seek=0
Run Code Online (Sandbox Code Playgroud)

试图阻止分区表被覆盖但仍然没有雪茄.

我使用带OSX的Mac并使用VirtualBox测试操作系统

我可以在VBox中运行floppy.img并且代码工作正常,但是当我尝试将引导加载程序安装到FAT 16格式化磁盘上时,OSX似乎无法再读取磁盘映像,就像它变得无格式化一样.

磁盘实用程序的确切消息是Unable to attach image "floppy.img."(No Mountable File Systems)即使我刚刚使用FAT 16文件系统格式化磁盘.

不幸的是,这是我的第一篇文章,我不能给你一张照片.

我真的很感激任何帮助.磁盘结构真的不是我的强项.

ick*_*fay 8

在使用时dd,请尝试添加该conv=notrunc选项.这会强制它不要尝试截断文件,而只是覆盖您指定的部分.