【问题标题】:NASM and INT13h - what am I doing wrong?NASM 和 INT13h - 我做错了什么?
【发布时间】:2010-07-14 21:50:44
【问题描述】:

嘿,我对操作系统编写很感兴趣,我已经很长时间了,但仍然无法接受(我主要是“第一次阅读时你不明白的事情你根本不应该做” - 它适用于我所做的所有其他事情,比如 PHP、HTML、AS3.0、C++ ......等等)我刚刚有点明白了。问题是——真的,ASM 直到现在我才需要一个特定的引导加载程序(我知道还有其他的,比如 GRUB 之类的,但这只是一个漫长的故事)。

显然,最重要的部分是实际从磁盘读取一些内容到图像扇区并跳转到那里。但是,INT 0x13 与 AH 0x02,即。从磁盘读取扇区并没有真正工作(或者我只是不明白)。

所以,我找到了这个信息: Click

在对 Bochs 进行了一些研究后,我发现了扇区数、柱面数、磁头数以及有关磁盘的所有信息。

现在,为了测试它,我想读取第一个扇区,并从中打印出几个字符 - 因为我一开始就知道有这个引导加载程序,我会看到使用的部分消息。

但是,它只是……不起作用。 我正在尝试将缓冲区放到不同的地方,消息,不同的扇区... 谁能给我看一个这样读取指定点的例子吗?

谢谢。

【问题讨论】:

  • 你在什么环境下运行这段代码?实模式DOS?
  • 嗯...它是在 Bochs 环境中,刚刚启动。而且我还没有切换到受保护,所以,是的,它很可能是真实的。

标签: assembly disk nasm


【解决方案1】:

您可以查看您知道的其中一个引导加载程序的源代码,例如蛴螬...

或者更简单:将工作安装的 MBR 或引导扇区存储在一个文件中并反汇编它。这很棒,因为它会为您提供由于空间限制(最大 512 字节)而只执行最低限度的加载程序代码

【讨论】:

  • 我看了一个,从 FAT16 到 32,但是...我对汇编程序太陌生了,所以我无法真正理解它(很多用于转换为 FAT32 扇区位置的操作码,但我不知道) '不知道是什么)——谁能解释一下这个中断(不仅仅是输入和输出,还有如何使用它)?
  • 好的,在这种情况下,安装一个旧的 Dos 操作系统并反汇编它的引导记录,它不会比使用 Int 13h 从 HD 读取几个扇区更复杂
  • 你查过维基百科吗? en.wikipedia.org/wiki/INT_13 它对输入/输出有很好的描述。 如何使用中断及其提供的数据在很大程度上取决于您要完成的工作,并且可能会因磁盘的格式化方式而有很大差异。
【解决方案2】:

终于明白了!

驱动器号 (DL) 似乎有误... 由于我切换到 HDD(而不是软盘),我忘记将其更改为 0x80。另外,扇区号在 CH 的 2-7 位,而不是 0-5。

:D 无论如何,谢谢。

【讨论】:

    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 2012-02-17
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    相关资源
    最近更新 更多