如何将bin文件(512字节)写入软盘的第一个扇区(扇区0)?

Sta*_* OS 8 assembly floppy bios osdev bootloader

如何将.bin文件写入软盘/虚拟软盘/软盘映像的第一个扇区?

我正在尝试启动一个简单的512字节引导加载程序.各地的大小都说"512字节",所以我应该已经很好了.

附加信息:

引导程序只显示一个字符串,我正在学习简单的汇编.一些工作是在Windows中完成的,一些是在Ubuntu 14.04(Trusty Tahr)中完成的(如果这很重要).

即使它具有引导加载程序标志,它也无法启动.

Mic*_*tch 14

如果您使用的是Linux,则可以使用DD实用程序.还有一个适用于Microsoft Windows 的DD版本.


一般DD用法

如果你想制作一个零填充的虚拟磁盘映像,大小为720K软盘,你可以像这样使用dd:

dd if=/dev/zero of=disk.img bs=1024 count=720
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为disk.img1024*720 = 737280字节的文件.可以创建一个1.44MB的零填充软盘映像:

dd if=/dev/zero of=disk.img bs=1024 count=1440
Run Code Online (Sandbox Code Playgroud)

将二进制图像写入从图像开头开始的虚拟软盘可以这样做:

dd if=bootload.bin of=disk.img conv=notrunc 
Run Code Online (Sandbox Code Playgroud)

此示例获取文件bootload.bin并将其放在磁盘映像的开头(disk.img在本例中称为)而不截断(conv=notrunc)如果不在conv=notrunc虚拟磁盘映像上使用它,则会将磁盘映像写入bootload.bin并截断为引导加载程序的大小.


DD还能够通过跳转到磁盘开头以外的位置来写入磁盘映像的特定部分.如果您需要在特定扇区中放置信息(代码/数据),这将非常有用.此示例可用于在磁盘映像的第一个512字节扇区之后放置引导加载程序的第二个阶段:

dd if=stage2.bin of=disk.img bs=512 seek=1 conv=notrunc
Run Code Online (Sandbox Code Playgroud)

bs=512将块大小设置为512(因为它是大多数软盘扇区的典型大小,因此更容易).seek=1寻找超过图像开头的第一个块(512字节)然后写入文件stage2.bin.我们需要conv=notrunc再次,因为我们不希望DDstage2.bin结束点截断磁盘映像.

dd if=stage2.bin of=disk.img bs=512 seek=18 conv=notrunc
Run Code Online (Sandbox Code Playgroud)

此示例与上一个示例类似,但在写入之前跳过9216字节(512*18) stage2.bin


如果你有一个软盘连接到Linux系统(和root访问),你可以用类似的东西编写bootloader

dd if=bootload.bin of=/dev/fd0 
Run Code Online (Sandbox Code Playgroud)

/dev/fd0你软盘的设备在哪里./dev/fd0通常是软盘A(如果存在)并且/dev/fd1是软盘B(如果存在).


DD for Windows

如果您在Microsoft Windows上运行,则可以使用实用程序的DD实用程序版本.最新下载是dd-0.6beta3.zip,是推荐的最低版本.它有一些旧的没有的功能.只需打开zip文件并将其解压缩到Windows路径上的某个位置即可.


bar*_*lop 0

听起来很有趣。

以前我曾多次写入软盘的前 512 字节。我想更深入地了解它。

Roadkil 的扇区编辑器可以做到这一点,它可以让您在屏幕上打开前 512 字节,并将其保存到文件中,然后打开包含前 512 字节的文件,并将其保存到软盘中。

http://www.roadkil.net/program.php?ProgramID=24

有趣的是,有一个关于引导的经典网站,由与你名字相似的人创建,starman.. http://starman.vertcomp.com/asm/mbr/ 虽然软盘是非分区介质,因此没有 MBR 。

我确信我已经保存了 Windows 98 软盘中的前 512 个字节,其中写着“启动 Windows 98”,然后进入 C 提示符。并且可以将其更改为Windows 95 软盘。你知道,如果 3 个核心文件之一出现问题,XP 可以有一个 3 文件启动盘。嗯,它有一个独特的启动扇区。它不是 dos 启动盘。我记得XP中的格式化命令和98中的不一样。98就像DOS的一样,有一个format /s来制作系统盘。我认为XP确实不能..而且我注意到Win7格式命令也不能。虽然在 XP 或 7 中,我认为您可以通过在“我的电脑”中右键单击 A 后勾选一个框来从 GUI 制作 dos 启动盘。您可以使用的另一件事是 *nix 风格的 dd 命令。或 ddrescue(比 dd 提供更多信息)。Bart 的 BBIE 是一个类似的程序,它可以提取 CD 的可启动部分并将其提取。Nero 曾经(或许现在仍然如此)能够获取软盘的 512 字节引导扇区,并基于它创建 CD。因此,如果您有可启动的 DOS 磁盘,则可以制作可启动的 DOS CD。它有一个选项,既可以让您浏览到带有该引导记录的映像,也可以直接将软盘放入并让它解压。