相关疑难解决方法(0)

传统BIOS引导加载程序在第二阶段引导实模式代码

我正在编写自己的操作系统.到目前为止,我的代码超过512字节,这太大了,无法容纳在简单的引导扇区中.

据我所知,我现在必须编写一个读取任意代码的引导加载程序,这些代码可能会也可能不会超过一个512字节的扇区.

引导程序需要:

  • 用作具有磁盘签名0xaa55的引导记录.
  • 从存储器地址0x7E00开始读取从LBA 1(LBA 0是引导扇区)开始的任意长度的第二阶段(测试代码).
  • 使用FAR JMP将控制转移到0x0000:0x7E00.
  • 可用作1.44 MiB软盘映像,用于QEMU,BOCHS,VirtualBox等仿真器.
  • 可以在USB记忆棒上传输和使用,以便在BIOS设置为使用软盘驱动器(FDD)仿真启动USB的情况下在真实硬件上进行测试.注意:放置在USB驱动器上时,某些引导加载程序无法正常工作.
  • 将启动驱动器传递到DL中的第二阶段.
  • 将所有段寄存器清零并将SS:SP设置为0x0000:0x7C00(从引导加载程序下方向下增长).

这也是提出涉及操作系统开发的Stack Overflow问题的一个很好的起点.程序员经常很难创建一个Minimal,Complete和Verifiable示例.一个常见的样板/模板将允许其他Stack Overflow用户希望通过有限的大惊小怪来帮助测试代码.

我将如何构建这样一个可重用的引导程序?

usb x86 assembly osdev bootloader

14
推荐指数
1
解决办法
391
查看次数

在 QEMU 中加载并运行具有 32 位代码的原始二进制文件

我有一个程序集(NASM)文件:

bits 32
start:
    mov dword [0xb8000], 0x2f4b2f4f
    hlt
Run Code Online (Sandbox Code Playgroud)

这会生成一个二进制文件,其中包含:

C7 05 00 80 0B 00 4F 2F 4B 2F F4
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在 QEMU 中执行此二进制文件中的代码,而无需更改代码且无需添加标头(如 Multiboot 或类似的)?我希望保持二进制文件原样。

x86 assembly binaryfiles qemu nasm

3
推荐指数
1
解决办法
5474
查看次数

x86 在实模式下检查保护模式和长模式

所以我想检查在实模式下是否支持保护模式和长模式。我知道我可以在处于保护模式时检查对长模式的支持,但这需要cpuid我认为我们在实模式下没有的指令(至少在旧处理器中)。

我没有找到任何相关信息。

x86 assembly real-mode

0
推荐指数
1
解决办法
402
查看次数

标签 统计

assembly ×3

x86 ×3

binaryfiles ×1

bootloader ×1

nasm ×1

osdev ×1

qemu ×1

real-mode ×1

usb ×1