MAR*_*LOW 1 assembly bios bootloader
我写了一个基本的程序集引导程序来清除屏幕并打印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
Run Code Online (Sandbox Code Playgroud)
现在我需要做的是在硬盘上创建一个文件。我知道我可以使用以下代码通过 DOS 中断轻松完成:
outputfile db "myfile.txt"
outhandle db ?
mov dx, offset outputfile
mov cx, 0
mov ah, 3Ch
int 21h
mov outhandle, ax
Run Code Online (Sandbox Code Playgroud)
但是我没有找到有关使用 BIOS 中断进行文件操作的任何信息。
这可能吗?
BIOS 中断调用背后的想法是抽象特定外围设备的血腥细节。因此,不必知道如何旋转电机移动头部等,而是有高级 bios 调用,与操作系统中对驱动程序或系统调用的调用不同,您可以通过这些调用读取此写入。
文件系统和其他类似的东西处于下一个更高的级别/层。与硬盘驱动器相关的 BIOS 调用可帮助您读取扇区、写入扇区之类的东西,但文件系统是高级别的,您必须在代码中实现它。(或对操作系统进行系统调用)。
如果你想简单地尝试读写,那么你可以在没有文件系统的情况下进行,因为在这个级别它只是位/字节/扇区而不是文件系统。您可以简单地写入扇区 N 到 M,然后将它们读回或以随机顺序读取它们等,以感觉到它们在那里。或者您可以使用操作系统创建文件系统并创建文件,然后使用 BIOS 调用读取文件系统基础结构(取决于文件系统)并尝试查找文件并按照目录信息收集该文件的各个部分部门。并将该信息与您可以在网上找到的有关该特定文件系统类型的任何质量信息结合使用,并比较注释,并可能从那里开发您自己的文件系统库。
如果这是您自己的事情,那么您可以选择根本不拥有文件系统,只需按照您的意愿跟踪该媒体上的数据。
请注意,有免费的 DOS 实现,您可以在其中借用它们的代码用于那些 DOS 调用,或者从中学习或其他什么。同样,您仍然可以找到第三方实现,其中一些是开源的。
正如评论中提到的,根据您的总体目标,有更新的解决方案可以替代直接 BIOS/DOS 来启动 PC。期望有一个类似的模型/功能,只是更新,更符合现代处理器,而不是在 8088/86 上开发的东西。