X86 “a”和“a”的区别是什么;。com“;文件和一个";。“银行标识代码”;文件

X86 “a”和“a”的区别是什么;。com“;文件和一个";。“银行标识代码”;文件,x86,operating-system,dos,bootloader,file-format,X86,Operating System,Dos,Bootloader,File Format,我正在开发一个基于汇编x86编程语言的内核。我只是想知道.bin文件和.com文件之间有什么区别。我可以从.com文件启动吗?在何处以及如何使用.com文件?如果您谈论的是DOS可执行文件,那么文件的结构很小。它的第一个字节对应于IP=0x100。当DOS启动它时,它将CS=DS=ES=SS=文件加载到的段。IP为0x100,SP通常接近0xFFFE(除非DOS内存不足)。偏移量0和0x100之间的空间包含一些控制信息,包括带有参数的命令行 对于.BIN文件的结构并没有一致的意见。它可以是任何东

我正在开发一个基于汇编x86编程语言的内核。我只是想知道.bin文件和.com文件之间有什么区别。我可以从.com文件启动吗?在何处以及如何使用.com文件?

如果您谈论的是DOS可执行文件,那么文件的结构很小。它的第一个字节对应于IP=0x100。当DOS启动它时,它将CS=DS=ES=SS=文件加载到的段。IP为0x100,SP通常接近0xFFFE(除非DOS内存不足)。偏移量0和0x100之间的空间包含一些控制信息,包括带有参数的命令行

对于.BIN文件的结构并没有一致的意见。它可以是任何东西。DOS不认识它

BIOS(除非我们讨论的是UEFI)不支持任何可执行格式。它只是从磁盘加载第一个扇区(到物理地址0x7C00),并将控制权传递给它(将CS:IP设置为0:0x7C00或0x7C0:0)。扇区必须能够从磁盘加载(使用BIOS int 0x13)更多扇区


照此,BIOS通常无法加载整个.COM程序并成功启动它。即使对于这样一个简单的任务,也需要一个第一阶段引导加载程序。但这是可以做到的。参见例如我的。它可以加载DOS.COMs和.EXEs。

大多数BIOS都会在512字节MBR扇区的末尾检查有效的引导签名(
dw 0xAA55
)。此外,一些BIOS将用磁盘分区信息(BPB)覆盖512字节的一部分,因此有一些结构。MichaelPetch的回答显示了BIOS所填充的结构:。引导扇区本身可以是一个自包含的程序,如果您的代码适合510字节(或510-50字节),它不必从磁盘加载更多代码。@PeterCordes Right。我没有回答BIOS所期望的,我更多的是回答关于.COM文件的直接问题。我想我的观点是,传统的biosmbr非常接近你所说的可执行文件格式,有一个神奇的数字和一切。是的,
.com
只是基于文件名,而不是文件“格式”,它告诉DOS只需以某种方式将整个文件加载到RAM中即可。@PeterCordes对于标准软盘驱动器,大多数BIOS不会检查有效的启动签名。说MBR有“一个幻数和所有东西”也是不准确的,因为它们有一个幻数而没有其他东西。