我一直在关注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打开磁盘时,系统提示驱动器需要格式化。我使用的代码是正确的吗?
发布于 2012-05-06 03:22:17
尝试短跳转:扇区以jmp short loader开头,然后是nop,然后通过bsFileSystem转到bpbName,然后是loader:和所有代码,然后是512字节扇区的最后2个字节是0x55和0xAA。这两个必须分别位于偏移量510和511。
发布于 2012-05-05 07:16:20
你错过了BPB之前的3字节跳转指令。每扇区字的字节数应位于相对于磁盘开头的偏移量0x0b,而不是位于0x08。跳转将转到BPB之后的引导加载程序代码(如果跳转足够短,它只需要两个字节,则后面跟着一个nop)。
如果一台机器永远不会从磁盘启动,你可以在前三个字节中放入任意的值,但传统的做法是跳转,它会转到一段代码中,然后打印This disk is not bootable之类的东西,然后停止机器。
发布于 2013-01-04 22:59:39
你可以在这里找到一个完整的FAt12驱动的汇编语言实现:Simple Operating System with Fat 12 Driver。
https://stackoverflow.com/questions/10457120
复制相似问题