Assembly 如何从USB(ARMx86)引导512字节引导加载程序

Assembly 如何从USB(ARMx86)引导512字节引导加载程序,assembly,boot,Assembly,Boot,这是一个简单的非操作系统特定的汇编程序,设计用于我的电脑的架构。由NASM的Linux版本编译 我试着把它放进USB,当我在BIOS中选择从USB启动时,它确实试着从USB启动。还有沉默。硬件一直在运行,但我的程序应该在屏幕上打印字符。只是一个黑屏,左上角有一个闪烁的白色光标(我认为它属于BIOS) 也许BIOS没有把我的“文件”算作引导扇区 以下是USB内容(Win7的屏幕截图,不是英文,但您可以很容易地理解它是什么): 属性 我需要一些东西来启动USB驱动器吗?我需要像主引导记录一样对它进

这是一个简单的非操作系统特定的汇编程序,设计用于我的电脑的架构。由NASM的Linux版本编译

我试着把它放进USB,当我在BIOS中选择从USB启动时,它确实试着从USB启动。还有沉默。硬件一直在运行,但我的程序应该在屏幕上打印字符。只是一个黑屏,左上角有一个闪烁的白色光标(我认为它属于BIOS)

也许BIOS没有把我的“文件”算作引导扇区

以下是USB内容(Win7的屏幕截图,不是英文,但您可以很容易地理解它是什么):

属性


我需要一些东西来启动USB驱动器吗?我需要像主引导记录一样对它进行分区吗?

几年前,我成功地创建了一个可引导的shell仿真器,该仿真器应该从USB驱动器引导,我也曾多次发现这个问题,但为了实现这一点,需要将MBR作为引导程序放在驱动器的第一个扇区,使用特殊的引导签名,它必须有512字节长,从那里您可以引导驱动器上的任何其他扇区,其中将包含其余的可引导程序。所以,请确保您的引导加载程序代码是正确的,并且位于驱动器的第一个扇区


另外,请确保您的系统支持USB引导功能,您可以通过BIOS引导设置轻松找到它。

引导加载程序需要位于MBR中,而不仅仅是磁盘上的文件。您还需要确保魔术数字是正确的。您的标题是ARMx64。这是正确的吗?这也是一个非常好的主意,以确保您有一个有效的BIOS参数块在那里,即使您正在做什么,比运行自己的代码。我见过许多硬件显然不仅仅是寻找有效的引导签名;缺少BPB,他们将拒绝引导,并且不会给出错误。