В настоящее время я пытаюсь написать крошечную ОС с нуля. К сожалению, на первом этапе я столкнулся с проблемой, которая сводит меня с ума. Я пишу следующий код в качестве моего загрузчика.Bochs не может загрузить файл img и загрузить его
.code16 #generate 16-bit code
.text #executable code location
.globl _start;
_start: #code entry point
. = _start + 510 #mov to 510th byte from 0 pos
.byte 0x55 #append boot signature
.byte 0xaa #append boot signature
В следующем шаге я скомпилировать его с помощью следующих команд:
as bootloader.s -o bootloader.o
ld –Ttext 0x7c00 --oformat=binary bootloader.o –o bootloader.bin
Затем я создаю файл IMG со следующими командами:
dd if=/dev/zero of=boot.img bs=512 count=2880
dd if=bootloader.bin of=boot.img
Наконец, когда я запускаю команду Bochs в терминале Бочс просто показал мне темное окно, и ничего не появилось. Что не так?
Кроме того, я попробовал следующий код в качестве загрузчика, но результат такой же, как и предыдущий.
.code16 #generate 16-bit code
.text #executable code location
.globl _start;
_start: #code entry point
#print letter 'H' onto the screen
movb $'H' , %al
movb $0x0e, %ah
int $0x10
#print letter 'e' onto the screen
movb $'e' , %al
movb $0x0e, %ah
int $0x10
#print letter 'l' onto the screen
movb $'l' , %al
movb $0x0e, %ah
int $0x10
#print letter 'l' onto the screen
movb $'l' , %al
movb $0x0e, %ah
int $0x10
#print letter 'o' onto the screen
movb $'o' , %al
movb $0x0e, %ah
int $0x10
#print letter ',' onto the screen
movb $',' , %al
movb $0x0e, %ah
int $0x10
#print space onto the screen
movb $' ' , %al
movb $0x0e, %ah
int $0x10
#print letter 'W' onto the screen
movb $'W' , %al
movb $0x0e, %ah
int $0x10
#print letter 'o' onto the screen
movb $'o' , %al
movb $0x0e, %ah
int $0x10
#print letter 'r' onto the screen
movb $'r' , %al
movb $0x0e, %ah
int $0x10
#print letter 'l' onto the screen
movb $'l' , %al
movb $0x0e, %ah
int $0x10
#print letter 'd' onto the screen
movb $'d' , %al
movb $0x0e, %ah
int $0x10
. = _start + 510 #mov to 510th byte from 0 pos
.byte 0x55 #append boot signature
.byte 0xaa #append boot signature
Вы должны по крайней мере сделать что-то вроде 'jmp .' в конце кода, чтобы попасть в бесконечный цикл, иначе вы будете выполнять все, что происходит в памяти после этого последнего' int $ 0x10' –
Предпочтительно я ' d do 'endloop: hlt'' jmp endloop' вместо моего более простого решения' jmp .' в первом комментарии. Любой из них может быть помещен в конец вашего кода. –
hmmm ничего не появилось снова. bochs просто показывают темный экран. :( – Adonaim