Assembly 如何将操作系统的引导加载程序写入U盘?

Assembly 如何将操作系统的引导加载程序写入U盘?,assembly,operating-system,boot,bootloader,Assembly,Operating System,Boot,Bootloader,我试图为自己的操作系统制作一个引导加载程序。我试着用imageusb程序将其写入U盘(格式:img、iso和bin,没有任何效果)。然后我尝试启动它,但在BIOS启动菜单中找不到它。我用汇编编码。如何使用自己的引导加载程序引导操作系统 以下是我的部分代码: [BITS 16] [ORG 0x7C00] JMP Main Main: MOV SI, Text CALL PrintString CALL NextLine MOV SI, PressKeyForBoot CALL PrintS

我试图为自己的操作系统制作一个引导加载程序。我试着用imageusb程序将其写入U盘(格式:img、iso和bin,没有任何效果)。然后我尝试启动它,但在BIOS启动菜单中找不到它。我用汇编编码。如何使用自己的引导加载程序引导操作系统

以下是我的部分代码:

[BITS 16]
[ORG 0x7C00]

JMP Main

Main:

MOV SI, Text
CALL PrintString
CALL NextLine

MOV SI, PressKeyForBoot
CALL PrintString
CALL Boot
JMP $

PrintCharacter:
MOV AH, 0x0E
MOV BH, 0x00
MOV BL, 0x07

INT 0x10
RET

NextLine:
MOV AL, 0
stosb
mov AH, 0x0E
MOV AL, 0x0D
INT 0x10
MOV AL, 0x0A
INT 0x10
ret

Boot:
CALL RebootKey
db 0x0ea
dw 0x0000
dw 0xffff

RebootKey:
mov ah, 0
int 0x16  
cmp ah, 01h
jne RebootKey

PrintString:
next_character:
MOV AL, [SI]
INC SI
OR AL, AL
JZ exit_function
CALL PrintCharacter
JMP next_character
exit_function:
RET


Text db 'Loading...', 0
PressKeyForBoot db 'Press ESC key to reboot.', 0
TIMES 510 - ($ - $$) db 0
DW 0xAA55

将引导加载程序代码写入可在Windows上使用的U盘的第一个扇区。打开dmde程序并选择正确的物理设备。在下一屏幕上,按f2键显示扇区的原始二进制数据。您必须将引导加载程序写入U盘的前512字节。引导加载程序签名
0xAA55
应该是第一个扇区的最后两个字节(即第510th、511th)。要写入数据,请使用
ctrl+e
,要保存更改,请使用
ctrl+w
。有关更多信息,请查看dmde窗口顶部的菜单栏

执行此操作后,请确保您的U盘在BIOS引导顺序设置中的优先级高于任何其他具有有效加载程序的磁盘

另外,@RossRidge正确地指出,当块设备在第一个扇区中有引导加载程序时,将任何分区标记为活动分区是无用的


p.S.以下是我的(仅限俄语)关于为U盘制作自己的引导加载程序的内容。

@AsdMan,在Windows上,您可以使用diskpart实用程序将分区标记为可引导。您必须将U盘上的分区标记为
活动
。如果引导扇区位于U盘的第一个扇区上,则不需要将任何分区标记为活动,因为第一个扇区位于任何分区之外。事实上,读取设备第一个扇区中的MBR分区表并启动标记为活动的分区是设备第一个扇区中包含的代码的工作。我不太懂英语。你能帮我吗。。。我需要这样做:@AsdMan,我改变了答案。请退房。