【发布时间】:2020-03-27 00:38:47
【问题描述】:
我正在做一个 hello world 项目以在我的 x86 裸机物理机上运行, 但是代码没有运行(启动)并且机器继续进行下一个启动设备, 我在汇编中编写了代码,以下步骤是我所做的:
第 1 步:通过 Bios 调用显示字符 A abd B 的代码
.L1 :
mov %ah,0x0E
mov %bh,0x00
mov %bl,0x07
mov %al,65
INT $0x10
mov %ah,0x0E
mov %bh,0x00
mov %bl,0x07
mov %al,66
INT $0x10
jmp .L1
第 2 步:
组装代码并以二进制格式生成代码:
as -o Code Code.txt
objcopy -O binary Code binfile
第 3 步:
打开HxD并显示汇编代码的二进制形式并填充 它用零直到我填充它们的第一个 512 字节的最后两个字节 55AA(十六进制)看起来像:
第四步:
将图像复制到闪存中:
dd bs=512 count=1 if=binfile of="\\.\e:"
(注意:我在 windows 上使用 dd)
注意:依赖于第一个扇区中的引导代码将显示两个字符的事实 没有使用 anu 进一步的引导加载程序,因为那是我的第一个项目,所以我设法保持简单。
不显示这些字符,并显示一条消息无效可启动设备,设备跳到下一个设备并正常启动窗口..我在这里缺少什么?
【问题讨论】:
-
@rfmodulator:我认为那部分是正确的:对于主引导记录,它应该是单词
0xAA55,也就是两个字节0x55 0xAA。 -
@rfmodulator:不,我不这么认为。十六进制编辑器正在显示字节。偏移量 510 处的字节为
55,偏移量 511 处的字节为AA,它们以小端形式一起构成单词0xAA55。 -
@NateEldredge 好的,感谢您的澄清...我认为 UEFI 也必须被禁用?很抱歉劫持了 Eng_Boody!
-
但是分区表是在的前512个字节,所以通过写入你的文件,你已经用零覆盖了它。
-
@rfmodulator:是的,这是另一个好点:BIOS 可能未设置为从 MBR 启动。
标签: assembly x86 bootloader bios att