小编Pat*_*ord的帖子

程序集Bootloader没有跳转到内核

我正在尝试在汇编中编写引导加载程序和内核以用于学习目的.当我组装代码并使用它启动虚拟机时,引导加载程序似乎正常工作,但内核永远不会启动.我想我正在跳错了指令,但不知道我需要做些什么更正才能解决我的问题.还有可能我试图使软盘不正确,但我认为这不是问题.当我在十六进制编辑器中查看图像文件时,似乎它们被正确附加.另一个原因可能是从软盘读取错误的扇区.我正试图让内核在引导加载程序之后立即进入扇区.

要构建和运行此代码,我在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开始了.软盘已重置.读取内核扇区内核扇区

.内核永远不会启动.

这是我的代码

bootloader_2.asm

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)

assembly operating-system kernel bootloader

7
推荐指数
1
解决办法
1584
查看次数

标签 统计

assembly ×1

bootloader ×1

kernel ×1

operating-system ×1