如何仅使用 BIOS 中断在汇编引导加载程序中的硬盘驱动器上创建文件?

How to create a file on hard drive in an assembly bootloader using only BIOS interrupts?

我写了一个基本的程序集引导加载程序来清除屏幕并打印 X:

[BITS 16]
[ORG 0x7c00]

main:
   mov ax, 0x03
   int 10h

   mov ah, 0x0E
   mov al, 'X'
   int 10h

   jmp $

times 510 - ($-$$) db 0
DW 0xAA55

现在我需要做的是在硬盘上创建一个文件。我知道我可以使用以下代码通过 DOS 中断轻松完成此操作:

outputfile db "myfile.txt"
outhandle  db ?

mov dx, offset outputfile
mov cx, 0
mov ah, 3Ch
int 21h
mov outhandle, ax

但是我没有找到任何关于使用 BIOS 中断进行文件操作的信息。

这可能吗?

BIOS 中断调用背后的想法是抽象特定外围设备的血淋淋的细节。因此,不必知道如何旋转电机移动头部等,而是有高级 bios 调用,与操作系统中对驱动程序或系统调用的调用不同,你有这些调用来读这个写那个。

文件系统和其他类似的东西在下一个更高的 level/layer。与硬盘有关的 BIOS 调用可帮助您读取扇区、写入扇区之类的东西,但文件系统是高级的,您必须在代码中实现它。 (或对操作系统进行系统调用)。

如果您想简单地尝试读写,那么您可以在没有文件系统的情况下进行,因为在这个级别它只是 bits/bytes/sectors 而不是文件系统。您可以简单地写入扇区 N 到 M,然后读回它们或以随机顺序读取它们,等等,以感觉它们在那里。或者您可以使用操作系统创建文件系统并创建文件,然后使用 BIOS 调用读取文件系统基础结构(取决于文件系统)并尝试查找文件并按照目录信息收集该文件的各个部分部门。并将该信息与您可以在网上找到的有关该特定文件系统类型的任何质量信息结合使用并比较注释,并可能从那里开发您自己的文件系统库。

如果这是你自己的东西,那么你可以选择根本没有文件系统,只要按照你的意愿跟踪该媒体上的数据即可。

请注意,有免费的 DOS 实现,您可以在其中借用它们的代码来进行那些 dos 调用,或者从中学习等等。同样,您可能仍然可以找到第三方实现,其中一些是开源的。

如评论中所述,根据您的总体目标,有更新的解决方案可以替代直接 BIOS/DOS 启动 PC。期望有一个类似的 model/functionality 只是更新和更符合现代处理器而不是在 8088/86 上开发的东西。