2011-04-16 139 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的情况下,这是默认设置。

实际上,还有其他的魔术字节需要用于分区表等,而且通常第一阶段加载器仅仅用于读入和执行更多的代码。