如何在汇编引导程序中仅使用BIOS中断在硬盘上创建文件?

问题描述 投票:0回答:1

我写了一个基本的汇编引导程序来清除屏幕和打印 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中断进行文件操作的资料。

这可能吗?

assembly bootloader bios
1个回答
4
投票

BIOS中断调用背后的想法是抽象出特定外设的血腥细节。 因此,不需要知道如何旋转一个电机,移动一个头,等等,有高水平的BIOS调用,不像驱动程序或操作系统中的系统调用,你有这些调用读这个写那个。

文件系统和其他类似的东西在下一个更高的层级。 BIOS对硬盘的调用可以帮助你读一个扇区,写一个扇区之类的东西,但是文件系统是高层次的,你必须在你的代码中实现(或者对操作系统进行系统调用)。

如果你想简单地进行读写实验,那么你可以不使用文件系统,因为在这个层面上,它只是bitbytessectors而不是文件系统。 你可以简单地写扇区N到M,然后读回它们,或者以随机顺序读它们,等等,以获得它们存在的感觉。 或者你可以使用操作系统来创建一个文件系统并创建文件,然后使用BIOS调用来读取文件系统基础设施(取决于文件系统),并尝试找到文件,并按照目录信息来收集该文件的各个部分,跨扇区。 并将这些信息与你能在网上找到的该特定文件系统类型的任何质量信息结合起来使用,并比较说明,也许可以从那里开发一个自己的文件系统库。

如果这是一个滚你自己的事情,那么你可以选择根本不需要文件系统,只是按照你的意愿跟踪该媒体上的数据。

注意,有一些免费的DOS实现,你可以借用他们的代码来进行那些dos调用,或者学习什么的。 同样你可能还能找到第三方的实现,其中有些会是开源的。

而且正如评论中提到的,根据你的整体目标,有一些更新的解决方案可以替代直接BIOSDOS来启动PC。 期望有一个类似的modelfunctionality只是更新和更符合现代处理器,而不是在808886上开发的东西。

© www.soinside.com 2019 - 2024. All rights reserved.