Слетает при любом флаге кроме f16. Конкретно мне нужен был f0 - выравнивание по страницам и f1 - необходима карта памяти, но в далеком будущем понадобиться и видео.
В BSS я пихаю стек загрузчика, а в перспективе и ядра - не в файле же его держать!
Код (кусками):
Нерабочая версия (с ошибками "Non-multiboot header"):
Код:
;Не смейтесь! У меня дурацкая привычка все в макросы пихать!
MBH_Align4K equ 001b
MBH_NeedMap equ 010b
MBH_NeedVideo equ 100b
MBH_Address equ 10000000000000000b
macro MultiBootMagics flg
{
dd MBH_Magic
dd flg
dd -flg-MBH_Magic
}
use32
org 0x100000
load_addr:
header_addr:
MultiBootMagics MBH_Align4K+MBH_NeedMap+MBH_Address
dd header_addr
dd load_addr
dd load_end_addr
dd bss_end_addr
dd entry_addr
;------
load_end_addr:
virtual;Bss section
MBInfo dd 0;Multiboot information structure (ebx)
Stk:;stack
db StackSize dup 0
end virtual
bss_end_addr:
;-------
Рабочая (с костылями):
Код:
use32
org 0x100000
load_addr:
header_addr:
MultiBootMagics 0x10000; MBH_Align4K+MBH_NeedMap+MBH_Address
dd header_addr
dd load_addr
dd load_end_addr
dd bss_end_addr
dd entry_addr
;--------
;virtual;Bss section
MBInfo dd 0;Multiboot information structure (ebx)
Stk:;stack
db StackSize dup 0
; end virtual
load_end_addr:
bss_end_addr: