Assembly 第二阶段引导加载程序文件名不能使用小写字母

Assembly 第二阶段引导加载程序文件名不能使用小写字母,assembly,filenames,bootloader,x86-16,Assembly,Filenames,Bootloader,X86 16,我指的是BrokenThorn的操作系统开发教程,目前正在撰写第一阶段引导加载程序和加载第二阶段的章节 我编写了整个代码,在使用qemu运行时遇到了崩溃。 经过一些调试后,我发现问题出在第二阶段引导加载程序的名称上,我通过循环根目录条目来读取该名称 如果我将第二阶段的文件名用作INITKRNL.BIN,则一切正常。但是如果我使用initkrnl.bin(因此区别仅限于名称的情况),它就会崩溃 我还打印了从根目录读取的名称。对于大写名称,它仅读取INITKRNL.BIN。对于小写名称,它读取名称的

我指的是BrokenThorn的操作系统开发教程,目前正在撰写第一阶段引导加载程序和加载第二阶段的章节

我编写了整个代码,在使用qemu运行时遇到了崩溃。 经过一些调试后,我发现问题出在第二阶段引导加载程序的名称上,我通过循环根目录条目来读取该名称

如果我将第二阶段的文件名用作INITKRNL.BIN,则一切正常。但是如果我使用initkrnl.bin(因此区别仅限于名称的情况),它就会崩溃

我还打印了从根目录读取的名称。对于大写名称,它仅读取INITKRNL.BIN。对于小写名称,它读取名称的一些字母和一些随机字符

为什么文件名的大小写很重要,这种差异的原因是什么


注意:我使用Ubuntu 13.04作为我的开发环境。我使用VFAT文件系统格式化软盘映像,使用
mkfs.VFAT

它实际上存储为11个字符的字符串,格式为8.3(文件名为8个字符,扩展名为3个字符)。因此,在ram中,它将是
INITKRNLASM


另外,我建议不要在软盘驱动器上使用VFAT文件系统,而是使用FAT12文件系统,因为它更简单,更适合这种大小的介质。

我不知道您在什么环境下运行它,但现在大多数文件系统不是区分大小写的吗?(即使是NTFS,尽管Win32 API选择将其视为不区分大小写)。@Michael:Linux。我正在启动一个用VFAT文件系统格式化的软盘映像。FAT12以大写形式存储文件名,并且不存储“.”(如果“first name”小于8,则空格填充为8)。@FrankKotler:好的。因此,即使我将文件存储为initkrnl.asm,它实际上也将存储为initkrnl.asm。所以当我读取根目录条目时,我应该只获取INITKRNL.ASM,对吗?但事实并非如此。