【问题标题】:Opening a file in Assembly Language independent of OS以独立于操作系统的汇编语言打开文件
【发布时间】:2012-06-17 00:01:10
【问题描述】:

我一直在试图弄清楚如何在汇编中打开硬盘驱动器中的文件。我想在不使用 DOS 中断或任何需要操作系统的情况下执行此操作,因为我正在尝试构建一个简单的操作系统。当然,我可以接受 BIOS 中断。

【问题讨论】:

  • 什么文件?文件是一种 O/S 抽象。如果是磁盘文件,您必须使用特定 BIOS 支持的任何磁盘读/写功能。
  • ...或绕过 BIOS 直接与硬件对话。
  • 如何直接与硬盘对话?我知道进出说明,但我不知道如何将它与硬盘一起使用。
  • 您使用 ATA 与驱动器通信。 here 提供大量信息,涵盖所有表格。您可能对PIO mode 最感兴趣,这是默认设置。该页面还描述了inout 最常用的端口号。 (您应该检查 PCI 以找到实际的端口,但这些值将适用于测试或如果您没有 PCI。)
  • @kjmcgrinder:一些可以帮助你的代码; mindrvr 用于说 ATA(PIO 和 DMA),driver for mindrvr。这都是在 C++ 中,但你明白了。这里是some code which uses PCI to discover the real ports,这里是some code to do the PCI bits。这一切都与操作系统有关,但它可能对您有所帮助。

标签: assembly file-io operating-system x86 osdev


【解决方案1】:

操作系统提供了两组功能,您必须模拟它们才能访问文件:

  • 一种设备驱动程序,可以读取和写入原始数据(在您的情况下,是从磁盘读取/写入)
  • 理解文件结构和抽象的工具库 如何阅读零件;这会调用驱动程序来执行实际的 I/O。

您或许可以调用 BIOS 调用来模拟坏的设备驱动程序;通常真正的驱动程序很复杂,以确保效率和良好的错误恢复,而 BIOS 例程根本不这样做。

但是您会发现自己难以做到的是模拟“文件访问”库。现代文件系统以相当复杂的方式将文件存储在磁盘上,以最大限度地减少访问时间,同时允许文件分布在磁盘的大部分区域。

如果您坚持这样做,您最好阅读您打算访问的任何文件系统(Linux?Windows?)的文件系统结构。准备好发现这些文档相对于实际操作系统是不完整的和过时的。

【讨论】:

    【解决方案2】:

    Here's 如何仅使用 BIOS 访问 FAT12/16/32。 _boot\BOOT12.ASM_boot\BOOT16.ASM 分别是 FAT12 和 FAT16 引导扇区,它们可以从引导磁盘的根目录加载和运行名为 STARTUP.BIN 的标准 .COM 或 .EXE 程序。这些引导扇区是为 NASM 编写的。 stdio\FAT.c 中还有 FAT12/16/32 文件 I/O 的 C 参考代码。

    【讨论】:

      猜你喜欢
      • 2011-10-15
      • 2013-06-14
      • 1970-01-01
      • 2017-07-19
      • 2012-06-13
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      相关资源
      最近更新 更多