我正在尝试使用 qemu 运行一个简单的引导加载程序。

start:
    jmp start

    times 510 - ($ - $$) db 0
    db 55h
    db 0AAh

以及我所做的和我所拥有的:
 $ nasm -f bin -o boot.bin boot.s

 $ dd if=/dev/zero of=boot.img bs=1M count=64
64+0 records in
64+0 records out
67108864 bytes (67 MB) copied, 0.178296 s, 376 MB/s

 $ dd status=noxfer conv=notrunc if=boot.bin of=boot.img
1+0 records in
1+0 records out

 $ qemu -pflash boot.img
qemu: fatal: Trying to execute code outside RAM or ROM at 0x000a0000

EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000633
ESI=00000000 EDI=00000000 EBP=00000000 ESP=00000000
EIP=000affd6 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0000 00000000 0000ffff 00009300
CS =f000 ffff0000 0000ffff 00009b00
SS =0000 00000000 0000ffff 00009300
DS =0000 00000000 0000ffff 00009300
FS =0000 00000000 0000ffff 00009300
GS =0000 00000000 0000ffff 00009300
LDT=0000 00000000 0000ffff 00008200
TR =0000 00000000 0000ffff 00008b00
GDT=     00000000 0000ffff
IDT=     00000000 0000ffff
CR0=60000010 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000000 CCD=00000000 CCO=ADDB
EFER=0000000000000000
FCW=037f FSW=0000 [ST=0] FTW=00 MXCSR=00001f80
FPR0=0000000000000000 0000 FPR1=0000000000000000 0000
FPR2=0000000000000000 0000 FPR3=0000000000000000 0000
FPR4=0000000000000000 0000 FPR5=0000000000000000 0000
FPR6=0000000000000000 0000 FPR7=0000000000000000 0000
XMM00=00000000000000000000000000000000 XMM01=00000000000000000000000000000000
XMM02=00000000000000000000000000000000 XMM03=00000000000000000000000000000000
XMM04=00000000000000000000000000000000 XMM05=00000000000000000000000000000000
XMM06=00000000000000000000000000000000 XMM07=00000000000000000000000000000000
Aborted

我在 Debian x64 中所做的所有这些事情。
我在构建目标文件时尝试使用链接器脚本和 elf64 配置,但它不起作用。我猜问题出在引导加载程序的代码中。但是哪里?

最佳答案

问题出在构建脚本中。只需使用软盘启动:

qemu -fda boot.img

详情:http://wiki.osdev.org/QEMU

关于assembly - 当通过 qemu 运行时,简单的引导加载程序在 RAM 之外,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20775362/

10-12 18:31