Например, у меня есть следующий код (MikeOS).Создает ли сборку места памяти в момент написания ярлыка?
jmp short bootloader_start ; Jump past disk description section
nop ; Pad out before disk description
...
...
OEMLabel db "MIKEBOOT" ; Disk label
BytesPerSector dw 512 ; Bytes per sector
SectorsPerCluster db 1 ; Sectors per cluster
ReservedForBoot dw 1 ; Reserved sectors for boot record
NumberOfFats db 2 ; Number of copies of the FAT
bootloader_start:
mov ax, 07C0h ; Set up 4K of stack space above buffer
add ax, 544 ; 8k buffer = 512 paragraphs + 32 paragraphs (loader)
...
...
....
Теперь я знаю, что jmp short bootloader_start
означает, что он прыгает мимо секции OEMLabel...
и переходит на метку.
Поскольку я новичок в сборке, у меня есть несколько вопросов:
ли сборка выделения памяти в тот момент, вы пишете инструкции? Например, в последние пару строк, код выглядит:
times 510-($-$$) db 0 ; Pad remainder of boot sector with zeros dw 0AA55h ; Boot signature (DO NOT CHANGE!) buffer: ; Disk buffer begins (8k after this, stack starts)
buffer:
выделяет память?В этом блоке коды:
cli ; Disable interrupts while changing stack mov ss, ax mov sp, 4096 sti ; Restore interrupts
Почему мы очищаем Сбросьте Прерывание? Если я не ошибаюсь, этот бит кода выделяет 4096 байт стека.
Наконец, после вышеуказанного блока, мы имеем следующее:
mov ax, 07C0h ; Set data segment to where we're loaded mov ds, ax
Почему мы это делаем? На мой взгляд, это делается, чтобы сообщить начало сегмента данных, где его происхождение?
'db' и т. Д. Помещают данные в сегмент данных исполняемого файла. http://stackoverflow.com/questions/31941830/how-are-arrays-initialised-to-zero-in-c-by-the-compiler/31942189#31942189. Для автономного кода, такого как загрузочное ядро ОС, разделы просто действуют, чтобы группировать байты данных отдельно от байтов кода. Все заканчивается, просто загружается в память. Я не уверен, как зарезервированное пространство 'bss' обрабатывается для загрузочной ОС, в отличие от двоичного файла Linux ELF (где код загрузчика ОС ELF отображает как можно большую нулевую память, чем говорит BSS). –