FAT 12实施

时间:2012-05-04 22:53:44

标签: assembly operating-system fat

我一直关注http://www.brokenthorn.com上的操作系统开发教程。现在我正在尝试使用以下代码设置BIOS参数块:

jmp loader
bpbName db "NubOS",0,0,0
bpbBytesPerSector:      DW 512
bpbSectorsPerCluster:   DB 1
bpbReservedSectors:     DW 1
bpbNumberOfFATs:        DB 2
bpbRootEntries:         DW 224
bpbTotalSectors:        DW 2880
bpbMedia:               DB 0xF0
bpbSectorsPerFAT:       DW 9
bpbSectorsPerTrack:     DW 18
bpbHeadsPerCylinder:    DW 2
bpbHiddenSectors:       DD 0
bpbTotalSectorsBig:     DD 0
bsDriveNumber:          DB 0
bsUnused:               DB 0
bsExtBootSignature:     DB 0x29
bsSerialNumber:         DD 0xa0a1a2a3
bsVolumeLabel:          DB "MOS FLOPPY "
bsFileSystem:           DB "FAT12   "

但是,当我尝试使用ImDisk driver虚拟软盘打开磁盘时,它表示需要格式化驱动器。我正在使用的代码是否正确?

3 个答案:

答案 0 :(得分:2)

你错过了BPB之前的3字节跳转指令。每扇区字节数应相对于磁盘的起始位置偏移0x0b,而不是0x08。跳转将转到BPB之后的引导加载程序代码(如果跳转足够短,只需要两个字节,则后跟一个nop)。

如果机器永远不会从磁盘启动,你可以在前三个字节中放置任意值,但是传统上仍然需要跳转,这会转到打印类似This disk is not bootable的代码片段。然后停止机器。

答案 1 :(得分:2)

尝试短线:该部门以jmp short loader开头,然后是nop,然后是bpbNamebsFileSystem,然后是{{ 1}}和所有代码,然后512字节扇区的最后2个字节为loader:0x55。这两个必须分别处于抵消0xAA510

答案 2 :(得分:1)

您可以在此处找到装配中FAt12驱动程序的完整实现: Simple Operating System with Fat 12 Driver