问题标签 [mbr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
loops - 为什么此 ASM 功能无法正确打印?
我正在尝试编写一个小函数来在特定内存位置打印以空字符结尾或固定长度的字符串。这是我的代码:
测试时,它会不确定地打印,并且不会在空字节处停止。我在哪里做错了?
embedded - 是否可以在没有 MBR 的情况下格式化小型 SD 卡?
我正在尝试为嵌入式系统实现只读 FAT16/32 文件系统库,以读取 SD 卡(出于教育目的重新发明轮子)。
似乎有些卡在没有 MBR 的情况下被格式化;只是没有任何分区表的FAT。
我已经阅读了 FAT 文档和 MBR 文档,并学习了如何读取同时具有 MBR 和 FAT 的 SD 卡。
我需要我的 C++ 库来支持在没有 MBR 的情况下读取 SD 卡。
我目前的方法如下:
- 尝试读取第一个扇区,假设它包含 FAT BPB(引导参数块)。
- 检查信息是否有效。
- 如果是,继续阅读根目录。
- 否则假设它有一个 MBR。
- 从 0x1BE 开始读取分区表。
- 如果支持的分区类型可用,请尝试将其第一个扇区读取为 FAT。
- 如果读取信息有效,则继续读取根目录。
- 否则返回 ERROR_CODE
有更好的方法吗?例如,是否有任何可以识别的幻数或特定模式?
windows - Boot Indicator 字段如何适应 MBR 分区表?
显然 MBR 是一个 512 字节的数据结构。
- BootCode 为 446 字节。
- 分区表 64 字节
- 签名的 2 个字节最后。
分区表结构有四个 16 字节的条目,每个条目用于标识硬盘上分区的类型和位置。
根据微软
分区表的第一个元素,Boot Indicator 字段,指示卷是否是活动分区。磁盘上只有一个主分区可以设置此字段。
分区 1\ 0x01BE(446)
分区 2\ 0x01CE(462)
分区 3\ 0x01DE(478)
分区 4\ 0x01EE(494)
由于分区表的四个 16 字节条目都完全用完了所有可用的 64 字节空间,那么引导指示字段怎么可能有空间呢?
引导指示符字段是否塞入了活动条目字段空间的哪个分区?(我无法想象一个正则表达式操作来嗅出为每个条目运行的引导指示符字段......)
也许我认为这是错误的,但有些东西似乎是非法的?
linux - 现代操作系统会忽略 MBR 引导扇区中的 LBA/CHS 信息吗?
我已经擦除了备用闪存驱动器上的所有 CHS/LBA 信息和引导代码,只留下了裸扇区计数信息:
只留下这个:
80
ff
ff
ff
0c
ff
ff
ff
00 08 00 00
00 f8 d4 01
第一个标志表示它是可引导的,第 4 个标志是 FAT32,最后 2、4 个字节表示扇区开始并以 Big-endian 计数。FF
是我全部设置为的 CHS/LBA信息FF
而且,磁盘仍然可以正常工作。分区出现,我可以挂载、读取、写入等。
我在Linux上。Windows 如何处理 LBA/CHS 信息?在这个时代,CHS/LBA 是否无关紧要?
assembly - 为什么这些实模式代码可以在虚拟机上工作,但不能在我的真机上工作?
我正在尝试将汇编代码写入 mbr 以使用 BIOS ISR。我将以下代码写入 mbr,期望将字符“ABCD”打印在屏幕上:
这些代码在 bochs 或 qemu 模拟器上运行良好,但是当我写入我的真实磁盘并使用它启动时,什么都没有打印。我已经测试直接将 %al 寄存器设置为 chars ,并且打印效果很好。我正在使用 AMD PhenomII 955 处理器,我做错了什么吗?
operating-system - 每个 U 盘都可以变成可启动的 U 盘吗?
我即将购买大量 U 盘,以便在其中安装自定义操作系统。他们是否需要特殊的硬件配置才能使 MBR 部分适合引导?还是仅仅通过定义就足够了?
x86 - BIOS 磁盘 - 将扇区读入内存 (int 0x13, ah=0x02) 阻塞
我正在编写 MBR 并使用QEMU进行测试。
当使用读扇区到内存 ( int 0x13, ah=0x02
)时,该int
指令似乎阻止了我的程序的执行,并且它继续挂起。我已经用各种打印语句对此进行了测试,以确认它是这个特定的指令阻塞。
什么可以使中断阻塞?我认为这只能通过cli
指令来完成,即使那样它也不会阻塞int
指令。
对于上下文,这是导致阻塞中断的代码read_sectors_16
:
这是带有阻塞中断的函数:
assemblies - 从 Linux 调用 Grub (MBR)
我需要一个汇编工具。
我需要将处理器从保护模式切换到实模式。
我需要将第一个驱动器(现在是 SSD)的第一扇区的前 512 个字节复制到 0000:07c0 并将 JMP 复制到该位置。
实际上,我需要绕过 BIOS POST 从 Linux 引导 Grub2 以在sudo reboot
.
有任何想法吗?
pointers - 使用数据段时使用 BYTE PTR 确定地址大小
我试图找出一个 MBR 代码(实模式下的 16 位汇编代码),我有这些行:
实时发生的事情是物理地址是“D8” - 我怎么知道?因为这用于加载字符串并将其打印到字符串。这是我运行这个程序时看到的第一件事,这些是代码的第一行。
我的问题是关于第二行,我得到的物理地址是因为计算得到物理地址(段 * 16 + 偏移量)还是 BYTE PTR 告诉 SI 地址将是 BYTE 类型我们将读取的数据类型是字节类型?
assembly - 如何从 MBR 的分区表中获取 CHS 信息?
我正在创建一个读取分区表并加载可引导分区的第一个扇区的基本 MBR。我对 CHS 和 LBA 寻址模式感到困惑。我在一个教程中读到除了兼容性原因外,CHS 或多或少都没有使用。所以,我选择使用 LBA(INT 13h 扩展)。要加载驱动器的扇区,我必须从该分区的分区表中读取 CHS 值。只有这样我才能将其转换为 LBA 并将其存储在“磁盘地址包”中。
我的疑问是,分区表中的 CHS 每个是 1 个字节。我应该直接取这个值并将其转换为 LBA(或)我必须先将其转换为,
然后将其转换为LBA?
注意:我的 MBR 必须能够访问 HDD 和 USB 上的扇区 - 这就是动机。
操作系统:Ubuntu
组装者:气体