首页 > 解决方案 > 我在读取 ext2 文件系统的超级块结构时遇到问题。为什么我的代码读取 log2(block_size) 字段的错误值?

问题描述

我尝试为 ext2 格式化驱动器编写引导加载程序。我将超级块加载到 0x7e00。然后我通过读取第 24 个字节来确定块大小。我用这个值向左移动了 1024。但是 cl 寄存器包含错误的值。

内存转储(在 0x7e00 + 24 为 4 个字节):

24>: 0x02 0x00 0x00 0x00
Shifted value: 0x400 (eax)
cl: 0x00

我的代码:

mov     eax, 1024
mov     cl, byte [0x7e00 + 24]
shl     eax, cl
mov     [BLOCK_SIZE], eax

我做错了什么?

标签: assemblybootloaderext2

解决方案


解决方案:问题是我忘记了我的 DS 注册。我将 org 指令更改为 org 0x7c00 并将段寄存器设置为 0x0


推荐阅读