我正在尝试在汇编中编写引导加载程序和内核以用于学习目的.当我组装代码并使用它启动虚拟机时,引导加载程序似乎正常工作,但内核永远不会启动.我想我正在跳错了指令,但不知道我需要做些什么更正才能解决我的问题.还有可能我试图使软盘不正确,但我认为这不是问题.当我在十六进制编辑器中查看图像文件时,似乎它们被正确附加.另一个原因可能是从软盘读取错误的扇区.我正试图让内核在引导加载程序之后立即进入扇区.
要构建和运行此代码,我在Windows Vista x64中执行以下操作:
nasm bootloader_2.asm -f bin -o bootloader_2.bin
nasm kernel_2.asm -f bin -o kernel.bin
partcopy bootloader_2.bin bootloader_2.img 0d 511d
partcopy kernel_2.bin kernel_2.img 0d 511d
copy bootloader.img /b + kernel.img POS_2.img
Run Code Online (Sandbox Code Playgroud)
然后我使用Oracle VM Virtual Box将POS_2.img挂载为软盘驱动器,并在来宾系统上运行它.
结果是
帕特里克的Bootloader开始了.软盘已重置.读取内核扇区内核扇区
.内核永远不会启动.
这是我的代码
bits 16
org 0x7C00
boot: jmp loader
; OEM Parameter block / BIOS Parameter block (wtf is this for?)
times 0Bh-$+boot DB 0
bpbBytesPerSector: DW 512
bpbSectorsPerCluster: DB 1
bpbReservedSectors: DW 1
bpbNumberOfFATs: DB 2
bpbRootEntries: DW 224
bpbTotalSectors: …Run Code Online (Sandbox Code Playgroud)