我正在尝试为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
我正在编译
nasm -f bin loader.asm -o loader.bin
dd if=loader.bin of=floppy.img bs=512 count=1 seek=0
我读过前446个字节是引导代码,字节447 - 509是分区表。 然后我尝试使用:
dd if=loader.bin of=floppy.img bs=446 count=1 seek=0
试图阻止分区表被覆盖,但仍然没有雪茄。
我使用带OSX的Mac并使用VirtualBox测试操作系统
我可以在VBox中运行floppy.img并且代码工作正常,但是当我尝试将引导加载程序安装到FAT 16格式化磁盘上时,OSX似乎无法读取磁盘映像,就像它变得无格式化一样。
磁盘实用程序之外的确切消息是Unable to attach image "floppy.img."(No Mountable File Systems)
即使我刚用FAT 16文件系统格式化了磁盘。
不幸的是,这是我的第一篇文章,我不能给你一张照片。
我真的很感激任何帮助。磁盘结构真的不是我的强项。
答案 0 :(得分:8)
当您使用dd
时,请尝试添加conv=notrunc
选项。这会强制它不要尝试截断文件,而只是覆盖您指定的部分。