我在读取 ext2 文件系统的超级块结构时遇到问题。为啥我的代码读取 log2(block_size) 字段的错误值?
Posted
技术标签:
【中文标题】我在读取 ext2 文件系统的超级块结构时遇到问题。为啥我的代码读取 log2(block_size) 字段的错误值?【英文标题】:I have problems reading the superblock structure of an ext2 file system. Why does my code read the wrong value for the log2(block_size) field?我在读取 ext2 文件系统的超级块结构时遇到问题。为什么我的代码读取 log2(block_size) 字段的错误值? 【发布时间】:2020-10-16 00:21:29 【问题描述】:我尝试为 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
我做错了什么?
【问题讨论】:
什么是“BOCHS内存输出:”? Bochs 是一个虚拟机。我在它的调试器中输入:x /1024bx 0x7e00。这是内存转储的一部分 我知道 BOCHS 是什么,我不清楚你所展示的价值是什么。 (但仍然不是真的) 那是我的内存在 0x7e00 + 24 4 字节的内容。它是我加载到内存中的超级块的一部分。顺便说一句,我混淆了 cl 中的值。现在是 0x00。我希望 cl 的内容是 0x02 而 eax 是 0x1000 你的DS
0 吗?
【参考方案1】:
解决方案: 问题是我忘记了我的 DS 注册。我将 org 指令更改为 org 0x7c00 并将段寄存器设置为 0x0
【讨论】:
以上是关于我在读取 ext2 文件系统的超级块结构时遇到问题。为啥我的代码读取 log2(block_size) 字段的错误值?的主要内容,如果未能解决你的问题,请参考以下文章