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

我正在尝试引导一个简单的512字节的 bootstrap 。到处都显示“512字节”,因此我应该已经不错了。

附加信息:

bootstrap 仅显示一个字符串,我正在学习简单程序集。有些工作在Windows中完成,有些工作在Ubuntu 14.04(Trusty Tahr)中完成(如果需要的话)。

即使具有引导加载程序标志,它也不会引导。

最佳答案

如果您使用的是Linux,则可以使用DD实用程序进行操作。也有用于Microsoft Windows的DD版本。

DD的一般用法

如果您希望制作一个零填充的虚拟磁盘镜像(大小为720K软盘),则可以使用dd,如下所示:

dd if=/dev/zero of=disk.img bs=1024 count=720

这将创建一个名为disk.img的文件,其大小为1024 * 720 = 737280字节。可以使用以下方法创建一个1.44MB的软盘镜像,该镜像为零填充:
dd if=/dev/zero of=disk.img bs=1024 count=1440

从镜像的开头开始将二进制镜像写入虚拟软盘可以像这样完成:
dd if=bootload.bin of=disk.img conv=notrunc

本示例获取文件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
bs=512将块大小设置为512(由于它是大多数软盘扇区的典型大小,因此更容易使用)。 seek=1定位到图像开头之后的第一个块(512字节),然后写入文件stage2.bin。我们再次需要conv=notrunc,因为我们不希望DD在stage2.bin结束的位置截断磁盘镜像。
dd if=stage2.bin of=disk.img bs=512 seek=18 conv=notrunc

此示例与最后一个示例相似,但是在写入stage2.bin之前跳过了9216个字节(512 * 18)

如果您将软盘连接到Linux系统(并且具有root访问权限),则可以使用类似以下内容编写引导加载程序:
dd if=bootload.bin of=/dev/fd0

其中/dev/fd0是软盘的设备。 /dev/fd0通常是软盘A(如果存在),而/dev/fd1是软盘B(如果存在)。

Windows版DD

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

关于assembly - 如何将bin文件(512字节)写入软盘的第一个扇区(扇区0)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32893607/

10-11 15:33