我正在基于Assembly x86编程语言的内核上工作。我只是想知道.bin文件和.com文件之间有什么区别。我可以从.com文件启动吗?哪里以及如何使用.com文件?
答案 0 :(得分:6)
如果您正在谈论DOS可执行文件,那么.COM文件的结构很少。它的第一个字节对应于IP = 0x100。当DOS启动它时,它将设置文件加载到其中的CS = DS = ES = SS = segment。 IP为0x100,SP通常接近0xFFFE(除非DOS内存不足)。偏移量0和0x100之间的空格包含一些控制信息Program Segment Prefix,其中包括带有参数的命令行。
.BIN文件没有公认的结构。可以是任何东西。 DOS无法识别它。
BIOS(除非我们在谈论UEFI)不支持任何可执行格式。它只是从磁盘加载第一个扇区(到物理地址0x7C00)并将控制权传递给它(将CS:IP设置为0:0x7C00或0x7C0:0)。该扇区必须能够以某种方式(使用BIOS int 0x13)从磁盘加载更多扇区。
IOW,BIOS通常无法加载整个.COM程序并成功启动它。即使对于如此简单的任务,也将需要第一阶段的引导加载程序。但这是可以完成的。参见例如我的BootProg。它可以加载DOS .COM和.EXE。