Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как написать загрузчик который запустит бинарный файл с диска

Занал Гусеньков Ученик (87), закрыт 1 год назад
Прошу ChatGPT написать мне код для загрузчика который запустит shell.bin из папки boot. Файл находится на самом диске, но ничего не работает. Компилирую через NASM
Лучший ответ
S.H.I. Оракул (73823) 1 год назад
Примерный код загрузчика:
 [org 0x7C00] ; BIOS загружает загрузчик по этому адресу 
[bits 16] ; Режим 16 бит

start:
cli ; Отключить прерывания
mov ax, 0x07C0 ; Установить сегментный регистр для стека
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
mov sp, 0xFFFF ; Установить указатель стека
sti ; Включить прерывания

; Установить сегмент данных
mov ax, 0x07C0
mov ds, ax

; Очистить экран
call ClearScreen

; Загрузить файл shell.bin в память
mov si, FileName ; Адрес строки с именем файла
call LoadFile

; Перейти к выполнению загруженного кода
jmp 0x1000:0x0000 ; Предполагается, что shell.bin загружен по адресу 0x1000:0x0000

LoadFile:
; Реализация функции загрузки файла shell.bin с диска.
; Это довольно сложная задача, которая требует чтения FAT12
; и поиска файла в корневом каталоге, а затем чтения его содержимого
; в память. Здесь должен быть ваш код для этой части.
ret

ClearScreen:
; Реализация функции очистки экрана
ret

FileName db 'BOOT/SHELL BIN', 0 ; Имя файла должно быть в формате 8.3

times 510-($-$$) db 0
dw 0xAA55 ; Сигнатура загрузочного сектора
Остальные ответы
Max Morozov Мастер (1586) 1 год назад
Сборка загрузчика:
 nasm -f bin -o loader.bin loader.asm 
Код загрузчика:
 global _start 

section .text
_start:

; Загружаем сектор загрузчика в память
mov eax, 0x0200 ; номер сектора
mov ebx, 0x0000 ; номер цилиндра
mov ecx, 0x0000 ; номер головки
mov edx, 0x0002 ; количество секторов
mov esi, 0x1000 ; адрес памяти

int 0x13 ; прерывание 13h, функция 02h (чтение с диска)

; Переход к точке входа shell.bin
mov eip, 0x1000 ; адрес точки входа

jmp eip
Похожие вопросы