2011-04-16 90 views
0

我正在閱讀brokenthorn.com的O/S開發教程之一的教程,下面的代碼就在那裏。引導程序的大小

http://www.brokenthorn.com/Resources/OSDev3.html

我不明白爲什麼這個代碼清晰510個字節。 org,bits,cli,hlt也在代碼中。不應該將其更改爲小於510字節?它可能是錯字或什麼的?

謝謝。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;********************************************* 
; Boot1.asm 
;  - A Simple Bootloader 
; 
; Operating Systems Development Tutorial 
;********************************************* 
org 0x7c00 ; We are loaded by BIOS at 0x7C00 

bits 16  ; We are still in 16 bit Real Mode 

Start: 

    cli ; Clear all Interrupts 

    hlt ; halt the system 

times 510 - ($-$$) db 0 ; We have to be 512 bytes. Clear the rest of the bytes with 0 

dw 0xAA55 ; Boot Signiture 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

回答

1

它不清除510字節,它清除510 - ($-$$)字節。由於$是當前位置,並且$$是本節的開頭,所以它將清除510 - (length of the section up to that point)字節。

這將從512字節的限制中正確地填充兩個字節,並將簽名放在最後兩個字節上。

0

引導扇區長度爲512個字節,並通過最後兩個字節開始設置爲0xAA55來標識。這會爲加載程序的實際代碼留下510個字節,這正是提供的示例在組裝時填充的內容。如果生成的二進制文件的長度不是512個字節,則可能需要指定純二進制輸出格式,但在nasm的情況下,這是默認設置。

實際上,還有其他的魔術字節需要用於分區表等,而且通常第一階段加載器僅僅用於讀入和執行更多的代碼。