2015-09-14 39 views
1

我試圖做一個引導程序爲我自己的操作系統。我試圖把它與imageusb程序寫入到一個USB記憶棒(從格式:IMG,ISO和垃圾桶,沒有什麼作品)。然後我嘗試啓動它,但是我沒有在BIOS啓動菜單中找到它。我用程序集編碼它。我怎樣才能使用自己的bootloader啓動操作系統?如何將我的操作系統的引導程序寫入USB棒?

這裏是我的代碼部分:

[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 

回答

2

要編寫Bootloader代碼到USB的第一個扇區堅持,你可以在Windows上使用dmde。打開dmde程序並選擇一個正確的物理設備。在下一個屏幕上按f2顯示扇區的原始二進制數據。您必須將引導加載程序寫入USB記憶棒的前512個字節。引導加載程序簽名0xAA55應該是第一個扇區的最後兩個字節(即第510個,第511個)。要使用ctrl+e寫入數據,要保存更改,請使用ctrl+w。有關更多信息,請查看dmde窗口頂部的菜單欄。

這樣做之後,要確保,你的U盤在BIOS中的啓動順序設置比有效裝載機的任何其他磁盤更大的優先級。

此外,@RossRidge是正確的關於標記任何分區爲無效的,而塊設備在第一個扇區中有一個引導加載程序。

P.S.這裏是我的article(俄羅斯只)製作你自己的引導程序的USB記憶棒。

+0

我使用Windows,感謝您的幫助。 – AsdMan

+0

@AsdMan,在Windows上,您可以使用** diskpart **實用程序將分區標記爲可啓動。你必須在你的U盤上標記分區爲'active'。 –

+0

如果引導扇區位於USB記憶棒的第一個扇區上,則不需要將任何分區標記爲活動分區,因爲第一個扇區位於任何分區之外。實際上,設備第一扇區中包含的代碼的工作是讀取嵌入在其中的MBR分區表,並引導標記爲活動的分區。 –

相關問題