размер загрузчика - PullRequest
       7

размер загрузчика

0 голосов
/ 16 апреля 2011

Я читаю один из руководств по разработке O / S на brokenthorn.com, там приведен следующий код.

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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Ответы [ 2 ]

1 голос
/ 16 апреля 2011

Он не очищает 510 байт, он очищает 510 - ($-$$) байт. Поскольку $ является текущей позицией, а $$ является началом раздела, он очищает 510 - (length of the section up to that point) байтов.

Это позволит правильно заполнить блок до двух байтов от ограничения в 512 байтов и поставить подпись на двух последних байтах.

0 голосов
/ 16 апреля 2011

Загрузочный сектор имеет длину 512 байт и идентифицируется как таковой в последних двух байтах, начинающихся с 0xAA55.Это оставляет 510 байт для фактического кода загрузчика, который является именно тем, что заполняет приведенный пример при сборке.Если ваш результирующий двоичный файл имеет длину не более 512 байт, тогда вам может потребоваться указать простой двоичный формат вывода, хотя в случае с nasm это значение по умолчанию.

На практике существуют другие магические байты, которые требуютприсутствовать для таблиц разделов и тому подобного, и, как правило, загрузчик первого этапа используется лишь для чтения и выполнения некоторого дополнительного кода.

...