assembly - 从 CD 加载扇区

标签 assembly cd 16-bit sector

我是操作系统设计的新手,到目前为止已经设计了一个“操作系统”(实际上只是一个引导扇区),并决定尝试制作一个独特的引导加载程序和“内核”(仍然非常简单)。我的问题很简单,但通过谷歌搜索和搜索这个网站却成功地避开了我(好吧,我确实找到了一个类似的问题,但答案对于我能够使用它来说是模糊/高级的)。

我看过 int 0x13 AH=02,但它使用轨道,我认为 CD 不使用轨道。我在某处看到我应该使用扩展读取扇区(AH=0x42),但我不知道如何使用它,因为我不知道在哪里可以指定要读取的扇区,以及扇区应该在 RAM 中的位置.

问题如下:如何从不使用 El Torito 仿真的 CD 加载扇区。如果您能以“最简单的形式”给出答案,并尝试提供一些代码,我将不胜感激,因为我对此很陌生。提前致谢!

编辑:

我不知道你是否需要它,但我使用的是 NASM 语法,所以如果你能在 NASM 中给我答案,那就太好了。

最佳答案

按照惯例,BIOS 将您应该用于 int 13h 的驱动器号放入 DL 寄存器中。然后,您可以使用 int 13h, ax=4B01h(获取仿真状态)来确定磁盘信息,并使用 int 13x 函数 42h 来读取 0x800 大小的 CD 扇区,其中扇区号位于 LBA 字段中。检查ISOLINUX bootloader更多细节。入口点是_start,读取扇区的例程是getlinsec_cdrom

编辑:阅读the documentation关于 int 13h 扩展如何使用它。基本上,您需要传递一个填充结构,其中包含扇区号、计数和放置读取数据的缓冲区地址。

关于assembly - 从 CD 加载扇区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9677358/

相关文章:

windows - 将 COBOL 编译为适用于 Windows 的 32 位可执行文件

embedded - 16 位处理器的任意精度算术 (Bignum)

linux - NASM 一次打印一个字符

c - 在thumb模式下编译时的GCC arm指令模式

c - 在C中查找已知名称的文件地址

c# - 在 C# 中保存 PNG 图像时丢失像素深度

assembly - 在 AVR 中断中保留 sreg

linux - 使用 GDB 在 Assembly 中修改后程序不会运行

python - 如何从 python 脚本更改当前目录?