首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FAT 12实现

FAT 12实现
EN

Stack Overflow用户
提问于 2012-05-05 06:53:44
回答 3查看 622关注 0票数 1

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

代码语言:javascript
复制
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打开磁盘时,系统提示驱动器需要格式化。我使用的代码是正确的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-06 03:22:17

尝试短跳转:扇区以jmp short loader开头,然后是nop,然后通过bsFileSystem转到bpbName,然后是loader:和所有代码,然后是512字节扇区的最后2个字节是0x550xAA。这两个必须分别位于偏移量510511

票数 2
EN

Stack Overflow用户

发布于 2012-05-05 07:16:20

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

如果一台机器永远不会从磁盘启动,你可以在前三个字节中放入任意的值,但传统的做法是跳转,它会转到一段代码中,然后打印This disk is not bootable之类的东西,然后停止机器。

票数 2
EN

Stack Overflow用户

发布于 2013-01-04 22:59:39

你可以在这里找到一个完整的FAt12驱动的汇编语言实现:Simple Operating System with Fat 12 Driver

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10457120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档